Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串域名中删除子域_Python - Fatal编程技术网

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完全忘记了这一点!绝对比我最初的建议简单。已编辑并修复。