Python - 获取顶级域名

问题描述

我的功能有问题,应该从域中删除 tld。如果域有一些子域,它可以正常工作。例如:

输入:asdf.xyz.example.com

输出asdf.xyz.example

问题是当域没有任何子域时,域前有一个

输入:example.com

输出.example

这是我的代码

 res = get_tld(domain,as_object=True,fail_silently=True,fix_protocol=True)
 domain = '.'.join([res.subdomain,res.domain])

函数 get_tld 来自 tld library

有人能帮我解决这个问题吗?

解决方法

通过非常简单的字符串操作,这是您要找的吗?

d1 = 'asdf.xyz.example.com'
output = '.'.join(d1.split('.')[:-1])
# output = 'asdf.xyz.example'

d2 = 'example.com'
output = '.'.join(d2.split('.')[:-1])
# output = 'example'
,

您可以使用过滤。看起来 get_tld 按预期工作,但 join 不正确

domain = '.'.join(filter(lambda x: len(x),[res.subdomain,res.domain]))
,

另一个简单的版本是这样的:

def remove_tld(url):
    *base,tld = url.split(".")
    return ".".join(base)


url = "asdf.xyz.example.com"
print(remove_tld(url))    # asdf.xyz.example

url = "example.com"
print(remove_tld(url))    # example

*base,tld = url.split(".") 将 TLD 放在 tld 中,将其他所有内容放在 base 中。那么你只需 join tĥat 和 ".".join(base)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...