从字符串域名中删除子域

时间:2017-12-17 07:06:58

标签: python

所以我编写了一个小函数来从输入域字符串中删除子域(,如果有的话):

def rm(text):
    print(text.replace(text, '.'.join(text.split('.')[-2:])), end="")
    print("\n")

if __name__ == "__main__":
    rm("me.apple.com")
    rm("not.me.apple.com")
    rm("really.not.me.apple.com")
    # problem here
    rm("bbc.co.uk")

除了.something.something.co.uk .co.in之前,这一切都正常。

所以我的输出是:

apple.com
apple.com
apple.com
--> co.uk

应该在哪里,

apple.com
apple.com
apple.com
bbc.co.uk

如何以优雅的方式修复/创建函数,而不是检查所有可能的双tld? 修改:如果重要,我将需要检查数百万个域名。所以我要做的是将域传递给我的函数并获得一个干净的子域免费域。

2 个答案:

答案 0 :(得分:3)

根据公共后缀列表,tldextrat包应该为您做繁重的工作。它不是防弹,但应适用于所有合理的用例:

import tldextract
def rm(text):
    return tldextract.extract(text).registered_domain

答案 1 :(得分:1)

你做不到。不是没有查询某种服务 - 至少是DNS - 或者在函数中编码答案数据库。

为什么不呢?因为你无法准确地用语言描述你想要做什么。例如,“me.apple.com”应解析为“apple.com”,“me.apple.co.uk”应该解析为“apple.co.uk”,但“a.b.c.d.e”应解决什么?没有办法知道,除非这些例子是以他们的内容暗示(但仍未定义)正确答案的方式挑选出来的。

一旦你想出了算法的文字描述,就可以实现。

您可以使用“whois”服务来完成繁重的工作:https://www.whois.com/whois/ - 如果您愿意发出HTTP请求,这可以满足您的需求。