如何在Python中从URL中获取域名(名称+顶级域名)

3

我想从一组可能格式不同的URL中提取域名(站点名称+顶级域名)。 例如: 当前状态---->我想要的

mail.yahoo.com------> yahoo.com
account.hotmail.co.uk---->hotmail.co.uk
x.it--->x.it
google.mail.com---> google.com

有没有任何Python代码可以帮助我从URL中提取我想要的内容,还是我需要手动操作?

4个回答

8
这有些棘手,因为没有简单的规则来确定什么是有效的公共后缀(站点名称+顶级域名)。相反,公共后缀是由PublicSuffix.org维护的列表确定的。
存在一个Python包,可以查询该列表(本地存储);它被称为publicsuffix
>>> from publicsuffix import PublicSuffixList
>>> psl = PublicSuffixList()
>>> print psl.get_public_suffix('mail.yahoo.com')
yahoo.com
>>> print psl.get_public_suffix('account.hotmail.co.uk')
hotmail.co.uk

谢谢。请问我应该如何使用这个包?下载后应该打开哪个文件? - UserYmY
可以选择运行setup.py文件,或者使用一个Python安装工具(推荐) - Martijn Pieters
我正在使用Eclipse IDE。哪一个是推荐的? - UserYmY
公共后缀的替代方案是tldextract模块。 - John Rutledge
是的,Loki在他的回答中提到了它。 - Martijn Pieters

3

有一个公共列表,列出了维护的顶级域名和国别顶级域名。

这个Python项目会读取这个列表,并将您的URL与该列表进行比较。

https://github.com/john-kurkowski/tldextract

@Martijn的回答恰好涵盖了这点。 - Burhan Khalid
1
这是一个替代的Python项目。但我认为Martijn Pieters更好。 - Martin York

1

目前我看到有六个软件包执行域名拆分:

它们在缓存公共后缀列表数据的方式上有所不同(只有tldextract使用JSON文件,因此在加载时省去了解析列表的步骤),在下载该数据时使用的策略上也有所不同,并且它们在内存中保留的结构(分别为:frozenset、set、set、标签字典、同上、名称字典)决定了搜索算法。

0
使用Python的tld模块

https://pypi.python.org/pypi/tld

$ pip安装tld

from tld import get_tld
print get_tld("http://www.google.co.uk/some-page/some-sub-page/")
'google.co.uk'

这是误导性的。TLD 是 uk - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接