仅从 Python 中的 URL 获取域名

Get just domain name from URL in Python

我见过类似的问题,但没有真正理解我要找的东西,所以我想知道。我正在尝试从其 URL 中提取服务器的主域,但仅此而已,没有任何子域。因此,如果 URL 是,例如,“http://forums.example.com/" I want to know how to extract just the "example.com" portion from it. I've tried splitting at the second-to-last dot but that brings trouble when dealing with URLs like "http://forums.example.co.uk/”,因为当我想要 "example.co.uk" 时它只提取 "co.uk"。有没有一种方法可以用这种方式解析 URL,而不必查找要比较的 TLD 列表?

PS:以防万一,我将在邮件服务器的上下文中使用它,因此 URL 可能看起来更像 "mail.example.co.uk" 或 "message-ID@user.mail.example.co.uk"

编辑:好的,所以我知道这个问题的答案与 "duplicate" 问题中的一个答案相同,但我认为它是不同的,因为问题是不同的。在另一个问题中,提问者询问的是不考虑子域的问题,因此选择的答案使用 urlparse,它不区分子域和域。此外,此问题还询问有关电子邮件地址的问题,并且 urlparse 不适用于电子邮件地址(抛出无效的 url 异常)。所以我相信这个问题与另一个问题不同,而不是重复的

您想查看 tldextract。有了它,你可以轻松地做任何你想做的事。例如:

>>> import tldextract
>>> extracted_domain = tldextract.extract('forums.example.com')
ExtractResult(subdomain='forums', domain='example', suffix='com')

那么你可以:

>>> domain = "{}.{}".format(extracted_domain.domain, extracted_domain.suffix)
>>> domain
'example.com'

它也适用于电子邮件:

>>> tldextract.extract('message-ID@user.mail.example.co.uk')
ExtractResult(subdomain='user.mail', domain='example', suffix='co.uk')

只需使用 pip 安装即可:pip install tldextract