从Python

时间:2017-07-10 22:01:36

标签: python email url domain-name

我已经看到了类似的问题,但并没有真正得到我正在寻找的东西所以我在想。我正在尝试从其URL中提取服务器的主域,但就是这样,没有任何子域。因此,如果URL是,例如,“http://forums.example.com/”我想知道如何从中提取“example.com”部分。我尝试过倒数第二个点,但在处理像“http://forums.example.co.uk/”这样的网址时会遇到麻烦,因为当我想要“example.co.uk”时它只提取“co.uk” ”。有没有办法我可以这样解析网址,而无需找到要比较的顶级域名列表?

PS:如果重要,我将在邮件服务器的上下文中使用它,因此URL可能看起来更像“mail.example.co.uk”或“message-ID@user.mail.example .co.uk“

编辑:好的,所以我知道这个问题的答案与“重复”问题中的答案之一相同,但我认为它是不同的,因为问题是不同的。在另一个问题中,提问者不管子域名是什么,所以选择的答案使用了urlparse,这不区分子域和域。此外,这个问题也询问了电子邮件地址,而urlparse不适用于电子邮件地址(抛出无效的网址异常)。所以我相信这个问题与另一个问题截然不同,而不是重复

1 个答案:

答案 0 :(得分:5)

您想查看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