我有一个网址,例如:http : //abc.hostname.com/somethings/anything/ 我想获取hostname.com我可以使用哪个模块来完成此操作?我想在python2使用相同的模块和方法非常感谢!
Phi*_*ßen 56
要在 Python 3 中解析 URL 的域,您可以使用:
from urllib.parse import urlparse
domain = urlparse('http://www.example.test/foo/bar').netloc
print(domain) # --> www.example.test
Run Code Online (Sandbox Code Playgroud)
但是,为了可靠地解析顶级域(example.test在本例中),您需要安装一个专门的库(例如tldextract)。
phi*_*hem 32
您可以使用 python 代替正则表达式或手写解决方案 urlparse
from urllib.parse import urlparse
print (urlparse('http://abc.hostname.com/somethings/anything/'))
>> ParseResult(scheme='http', netloc='abc.hostname.com', path='/somethings/anything/', params='', query='', fragment='')
print (urlparse('http://abc.hostname.com/somethings/anything/').netloc)
>> abc.hostname.com
Run Code Online (Sandbox Code Playgroud)
没有子域
t = urlparse('http://abc.hostname.com/somethings/anything/').netloc
print ('.'.join(t.split('.')[1:]))
>> hostname.com
Run Code Online (Sandbox Code Playgroud)
小智 6
试试这个代码:
from tldextract import extract
tsd, td, tsu = extract("http://abc.hostname.com/somethings/anything/") # prints abc, hostname, com
url = td + '.' + tsu # will prints as hostname.com
print url
Run Code Online (Sandbox Code Playgroud)
假设您将它放在一个可访问的字符串中,并假设我们希望在顶级域上具有多个级别,您可以:
token=my_string.split('http://')[1].split('/')[0]
top_level=token.split('.')[-2]+'.'+token.split('.')[-1]
Run Code Online (Sandbox Code Playgroud)
我们首先用 分割http://以从字符串中删除它。然后我们用 the 分割/以删除字符串的所有目录或子目录部分,然后[-2]我们取 a 之后的倒数第二个标记.,并将其附加到最后一个标记,为我们提供顶级域。
可能有更优雅和更强大的方法来做到这一点,例如,如果您的网站http://.com会崩溃,但它是一个开始:)