我有一个类似的URL:
http://abc.hostname.com/somethings/anything/
我想要获取:
hostname.com
我应该使用哪个模块来实现这个功能?
我想要在Python2中使用相同的模块和方法。
我有一个类似的URL:
http://abc.hostname.com/somethings/anything/
我想要获取:
hostname.com
我应该使用哪个模块来实现这个功能?
我想要在Python2中使用相同的模块和方法。
要在Python 3中解析URL的域名,您可以使用:
from urllib.parse import urlparse
domain = urlparse('http://www.example.test/foo/bar').netloc
print(domain) # --> www.example.test
然而,要可靠地解析顶级域名(例如此示例中的example.test
),您需要安装专门的库(例如tldextract)。
不需要使用正则表达式或手写解决方案,您可以使用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
获取没有子域名的方式
t = urlparse('http://abc.hostname.com/somethings/anything/').netloc
print ('.'.join(t.split('.')[-2:]))
>> hostname.com
urlparse
的库已更名为urllib.parse
。 - AIpeter*.co.uk
或*.ac.uk
域名中失败。 - mommi84t.split('.')[-2:]
字面上只保留最后两个子字符串,因此我担心无论您是否添加前缀,它都将仅返回 co.uk
和 ac.uk
。 - mommi84你可以使用 tldextract。
示例代码:
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)
tldextract
不是标准库(至少不在 Python 2.7 中),我认为你应该强调这一点。还是赞一个。 - t.m.adamtoken=my_string.split('http://')[1].split('/')[0]
top_level=token.split('.')[-2]+'.'+token.split('.')[-1]
我们首先通过http://
将字符串分割,以删除它。然后我们再通过/
来分割字符串,以删除所有目录或子目录部分,然后[-2]
表示我们在.
之后取倒数第二个标记,然后与最后一个标记连接起来,得到顶级域名。
可能有更加优美和健壮的方法来实现这一点,例如如果您的网站是http://.com
,它就会出错,但这是一个开始 :)
尝试:
from urlparse import urlparse
parsed = urlparse('http://abc.hostname.com/somethings/anything/')
domain = parsed.netloc.split(".")[-2:]
host = ".".join(domain)
print host # will prints hostname.com