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

3 投票
4 回答
3823 浏览
提问于 2025-04-17 19:24

我想从一堆网址中提取出域名(也就是网站的名字加上顶级域名,比如.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

目前我看到有六个工具可以用来分割域名:

这些工具在几个方面有所不同:它们存储公共后缀列表数据的方式不同(只有 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

撰写回答