所以我编写了一个小函数来从输入域字符串中删除子域(,如果有的话):
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? 修改:如果重要,我将需要检查数百万个域名。所以我要做的是将域传递给我的函数并获得一个干净的子域免费域。
答案 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请求,这可以满足您的需求。