我是Python的新手,我无法实现我想要的结果。我正在打开一个名为urldata.txt的文本文件,其中包含我需要按方案,服务器和路径细分的URL。
我从文件中检索了数据:
http://www.google.com
https://twitter.com/search?q=%23ASUcis355
https://github.com/asu-cis-355/course-info
返回:
urls.scheme()
urls.server()
urls.path()
我想将这些网址分成3个,以便在我输入
时urls.scheme()
'http','https','https'
当我输入
时,它将返回每个URL的方案urls.server()
'google.com'
'twitter.com'
'github.com'
然后当我输入
时它将返回服务器urls.path()
'/'
'/search?q=%23ASUcis355'
'/asu-cis-355/course-info'
最后,当我输入
时,它将返回路径class urls:
def __init__(self,url):
self.urls=urls
def scheme(self):
return urls.split("://")[0]
def server(self):
return urls.split("/")[2]
def path(self):
return urls.split(".com/")[1]
我已经定义了一个类来执行此操作;但是,我收到一个错误,说'scheme()缺少1个必需的位置参数:'self'下面是我的类,它是我创建的def部分。
{{1}}
非常感谢任何帮助!
答案 0 :(得分:2)
这已经存在。它被称为urlparse:
from urllib.parse import urlparse
d = urlparse('https://twitter.com/search?q=%23ASUcis355')
print(d)
输出:
ParseResult(scheme='https', netloc='twitter.com', path='/search', params='', query='q=%23ASUcis355', fragment='')
答案 1 :(得分:0)
如果你试图在Python3中没有创建这个类的实例来调用类定义(那些urls')那么你就会得到这个错误
>>> urls.scheme()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: scheme() missing 1 required positional argument: 'self'
>>>
但是如果您创建了一个url实例,然后使用该实例,则按预期工作
>>> url_instance = urls("http://www.google.com")
>>> url_instance.scheme()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in scheme
AttributeError: type object 'urls' has no attribute 'split'
请注意,这会修复您当前的错误,但您的代码不是正确的。我会让你弄清楚这个错误发生了什么。
类定义(或类型)与类的实例之间的区别有一些有趣的细微差别但一般来说
class Thing:
pass
是一个类定义和
thing_instance = Thing()
是该类的实例。