Python 从字符串域名中删除子域
因此,我编写了一个小函数,用于从输入域字符串中删除子域(,如果有):Python 从字符串域名中删除子域,python,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")
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
tld.,比如.co.uk
或.co.in
,否则一切都很好
所以我的输出是:
apple.com
apple.com
apple.com
--> co.uk
应该在哪里,
apple.com
apple.com
apple.com
bbc.co.uk
如何以优雅的方式修复/创建函数,而不是检查所有可能的双TLD?
编辑:如果有必要,我必须检查数百万个域。所以我要做的是将一个域传递给我的函数,并获得一个干净的、子域自由的域。你不能。如果不查询某种服务(至少是DNS),或者在函数中对答案数据库进行编码,就不能这样做 为什么不呢?因为你无法用语言准确地描述你想做什么。例如,“me.apple.com”应该解析为“apple.com”,“me.apple.co.uk”应该解析为“apple.co.uk”,但是“a.b.c.d.e”应该解析为什么呢?没有办法知道,除非这些例子是以其内容暗示(但仍然没有定义)正确答案的方式精心挑选的 一旦您提出了算法的文本描述,它就可以实现了
您可以使用“whois”服务来完成繁重的工作:-如果您愿意发出HTTP请求,这会满足您的需要。您不能。如果不查询某种服务(至少是DNS),或者在函数中对答案数据库进行编码,就不能这样做 为什么不呢?因为你无法用语言准确地描述你想做什么。例如,“me.apple.com”应该解析为“apple.com”,“me.apple.co.uk”应该解析为“apple.co.uk”,但是“a.b.c.d.e”应该解析为什么呢?没有办法知道,除非这些例子是以其内容暗示(但仍然没有定义)正确答案的方式精心挑选的 一旦您提出了算法的文本描述,它就可以实现了 您可以使用“whois”服务来完成繁重的工作:-如果您愿意发出HTTP请求,这会满足您的要求。包应该根据公共后缀列表为您完成繁重的工作。它不是防弹的,但应该适用于所有合理的用例:
import tldextract
def rm(text):
return tldextract.extract(text).registered_domain
根据公共后缀列表,包裹应该为您完成繁重的工作。它不是防弹的,但应该适用于所有合理的用例:
import tldextract
def rm(text):
return tldextract.extract(text).registered_domain
@Stephernauch是一个函数。可能很快,因为我会一次通过一个域,比如说,一百万个域。没有其他方法
co.uk
不是有效域,但co.de
是有效域。因此,foo.co.uk
将减少到foo.co.uk
,但是foo.co.de
应该变成co.de
。有几个库可以处理所有这些特殊情况。@请准确地混合我的想法!这就是我被卡住的原因!顺便说一句,你能说出图书馆的名字吗?怎么样?可能的dup:@stephernauch是一个函数。可能很快,因为我会一次通过一个域,比如说,一百万个域。没有其他方法co.uk
不是有效域,但co.de
是有效域。因此,foo.co.uk
将减少到foo.co.uk
,但是foo.co.de
应该变成co.de
。有几个库可以处理所有这些特殊情况。@请准确地混合我的想法!这就是我被卡住的原因!顺便说一句,你能说出图书馆的名字吗?怎么样?可能的dup:猜到了同样多:(.任何理解这一点的库,都可以使用sans dnspython进行单独查询,因为这样做成本太高且耗时。猜到了同样多:(.任何理解这一点的库,都可以使用sans dnspython进行单独查询,因为这样做成本太高且太耗时。您的做法是:ext=tldextract.extract(domain_和_子域);return ext.registered_domain
@Jeet.Deir完全忘记了这一点!绝对比我最初的建议简单。经过编辑和修复。这样做:ext=tldextract.extract(domain_with_subdomain);return ext.registered_domain
@Jeet.Deir完全忘记了这一点!绝对比我最初的建议简单。已编辑并修复。