从python中的URL提取域

Ami*_*mit 2 python url

我有一个网址,例如: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)

  • 对于“*.co.uk”或“*.ac.uk”域,它将失败。 (9认同)
  • 在 Python3 中,库 `urlparse` 被重命名为 `urllib.parse`。 (7认同)
  • `t.split('.')[-2:]` 实际上只保留最后两个子字符串,所以我担心它只会返回 `co.uk` 和 `ac.uk`,无论您是否在前面添加它。 (6认同)

小智 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)

  • `tldextract` 不是标准库(至少在 python 2.7 中不是),我认为你应该提到这一点。仍然 +1 (3认同)

Hen*_*nry 5

假设您将它放在一个可访问的字符串中,并假设我们希望在顶级域上具有多个级别,您可以:

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会崩溃,但它是一个开始:)