如何在Python中从URL获取域名(名称+顶级域)
我想从一堆网址中提取出域名(也就是网站的名字加上顶级域名,比如.com、.net等),这些网址的格式可能会有些不同。举个例子:
mail.yahoo.com------> yahoo.com
account.hotmail.co.uk---->hotmail.co.uk
x.it--->x.it
google.mail.com---> google.com
有没有什么Python代码可以帮我从网址中提取我想要的内容,还是说我得手动去做呢?
4 个回答
1
目前我看到有六个工具可以用来分割域名:
- https://pypi.python.org/pypi/tldextract
- https://pypi.python.org/pypi/tld
- https://pypi.python.org/pypi/publicsuffixlist
- https://pypi.python.org/pypi/publicsuffix
- https://pypi.python.org/pypi/publicsuffix2
- https://pypi.python.org/pypi/dnspy
这些工具在几个方面有所不同:它们存储公共后缀列表数据的方式不同(只有 tldextract 使用 JSON 文件,这样在加载时就不需要解析列表),下载数据的策略也不一样,以及它们在内存中保存数据的结构(分别是:不可变集合、集合、集合、标签字典、同上、名称字典),这些都会影响它们的搜索算法。
3
有一个公开的顶级域名(TLD)和国家代码顶级域名(CC TLD)列表,这个列表是有人在维护的。
这个Python项目会读取这个列表,并将你的网址和这个列表进行比较。
https://github.com/john-kurkowski/tldextract
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