2013-03-17 76 views
3

我想从URL列表中提取域名(站点名称+ TLD),URL列表的格式可能不同。 例如: 现状---->我想如何从python中的URL获取域名(名称+ TLD)

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

是否有任何Python代码,可以帮助我与提取我从URL想还是应该做手工?

回答

8

这有点不平凡,因为没有简单的规则来确定什么使有效的公共后缀(网站名称+ TLD)。相反,什么使公共后缀是maintained as a list at 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 
+0

Thanks.Can你告诉我应该如何使用这个软件包。下载后应打开哪个文件? – UserYmY 2013-03-17 12:53:18

+0

或者[运行'setup.py'文件](http://docs.python.org/2/install/index.html)或者使用[python安装工具(推荐)](http://guide.python -distribute.org/installation.html)。 – 2013-03-17 12:57:25

+0

我正在使用eclipse IDE。哪一个被推荐? – UserYmY 2013-03-17 12:58:04

2

有TLD和TLD CC的public list被维护。

此python项目读取此列表并将您的URL与此列表进行比较。

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

@ Martijn的回答完全覆盖了这一点。 – 2013-03-17 13:03:45

+1

它是一个替代python项目。但我认为Martijn Pieters更好。 – 2013-03-17 13:07:46

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' 
+0

这是误导。 tld是'uk'。 – Doug 2015-11-19 17:42:45

0

在这个时候,我看到有六个包做域名分裂:

他们的方式不同,他们缓存公共后缀列表数据(仅tldextract使用JSON文件,从而节约解析加载列表),用于下载数据的策略以及它们保存在内存中的结构(分别为:冻结nset,set,set,标签字典,同上,名字字典),它决定了搜索算法。