python 提取主域名和子域名代码——先根据规则提取,如果有问题,则使用tldextract

本文涉及的产品
.cn 域名,1个 12个月
简介:
复制代码
import tldextract



def extract_domain(domain):
    suffix = {'.com','.la','.io', '.co', '.cn','.info', '.net', '.org','.me', '.mobi', '.us', '.biz', '.xxx', '.ca', '.co.jp', '.com.cn', '.net.cn', '.org.cn', '.mx','.tv', '.ws', '.ag', '.com.ag', '.net.ag', '.org.ag','.am','.asia', '.at', '.be', '.com.br', '.net.br', '.name', '.live', '.news', '.bz', '.tech', '.pub', '.wang', '.space', '.top', '.xin', '.social', '.date', '.site', '.red', '.studio', '.link', '.online', '.help', '.kr', '.club', '.com.bz', '.net.bz', '.cc', '.band', '.market', '.com.co', '.net.co', '.nom.co', '.lawyer', '.de', '.es', '.com.es', '.nom.es', '.org.es', '.eu', '.wiki', '.design', '.software', '.fm', '.fr', '.gs', '.in', '.co.in', '.firm.in', '.gen.in', '.ind.in', '.net.in', '.org.in', '.it', '.jobs', '.jp', '.ms', '.com.mx', '.nl','.nu','.co.nz','.net.nz', '.org.nz', '.se', '.tc', '.tk', '.tw', '.com.tw', '.idv.tw', '.org.tw', '.hk', '.co.uk', '.me.uk', '.org.uk', '.vg'}

    domain = domain.lower()
    names = domain.split(".")
    if len(names) >= 3:
        if ("."+".".join(names[-2:])) in suffix:
            return ".".join(names[-3:]), ".".join(names[:-3])
        elif ("."+names[-1]) in suffix:
            return ".".join(names[-2:]), ".".join(names[:-2])
    print "New domain suffix found. Use tld extract domain..."

    pos = domain.rfind("/")
    if pos >= 0: # maybe subdomain contains /, for dns tunnel tool
        ext = tldextract.extract(domain[pos+1:])
        subdomain = domain[:pos+1] + ext.subdomain
    else:
        ext = tldextract.extract(domain)
        subdomain = ext.subdomain
    if ext.suffix:
        mdomain = ext.domain + "." + ext.suffix
    else:
        mdomain = ext.domain
    return mdomain, subdomain

print extract_domain("baidu.com")  == ("baidu.com", "")
print extract_domain("www.baidu.com") == ("baidu.com", "www")
print extract_domain("www.xx.com.cn") == ("xx.com.cn", "www")
print extract_domain("www.xxx.gov.cn") == ("gov.cn", "www.xxx")
print extract_domain("abc.www.xxx.net.co") == ("xxx.net.co", "abc.www")
print extract_domain("abcwwwxxx.local") == ("local", "abcwwwxxx")
print extract_domain("abcwwwxxxlocal") == ("abcwwwxxxlocal", "")
print extract_domain("attack/www.baidu.com") == ("baidu.com", "attack/www")
print extract_domain("xx.attack/xxx.baidu.com") == ("baidu.com", "xx.attack/xxx")
print extract_domain("attack/xxx.baidu.com") == ("baidu.com", "attack/xxx")
print extract_domain("xxx.baidu.new_suffix") == ("new_suffix", "xxx.baidu")
print extract_domain("attack/xxx.baidu.new_suffix") == ("new_suffix", "attack/xxx.baidu")
                                                                                       
复制代码

 















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7886296.html,如需转载请自行联系原作者



相关文章
|
2天前
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
3天前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
17 6
基于Python访问Hive的pytest测试代码实现
|
6天前
|
设计模式 缓存 开发者
Python中的装饰器:简化代码,提高可读性
【9月更文挑战第10天】在Python编程的世界中,装饰器是一种强大的工具,它允许开发者在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和生动的例子,带你了解装饰器的概念、使用方法及其在实际开发中的应用价值。我们将一起探索如何利用装饰器来简化代码结构,提升代码的可读性和可维护性,让你的编程之旅更加顺畅。
|
2天前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
19 12
|
2天前
|
测试技术 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第14天】在编程世界中,我们总是寻找使代码更简洁、更强大的方法。Python的装饰器正是这样一项工具,它允许我们在不修改原有函数代码的情况下,增加额外的功能。本文将通过实际示例,引导你理解装饰器的基本概念,展示如何创建和应用它们,以及如何利用装饰器简化日常编程任务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和技巧,让你的代码更加高效和优雅。
18 12
|
3天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第13天】本文深入探讨了Python中一个强大而常被误解的特性——装饰器。我们将从基础概念入手,逐步揭示其背后的原理,并通过实际示例展示如何利用装饰器来简化代码和扩展函数功能。文章不仅为初学者提供了清晰的入门指南,还为有经验的开发者展示了高级用法,旨在帮助读者更好地理解和运用装饰器,以提升编码效率和程序的可维护性。
23 10
|
5天前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
20 8
|
1天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【9月更文挑战第15天】本文将深入探讨Python中一个强大但常被误解的特性——装饰器。我们将从基础概念出发,逐步揭示装饰器如何简化代码结构,增加函数功能而无需修改其核心逻辑。通过具体示例,你将学会如何创建自定义装饰器,以及如何利用它们来管理权限、记录日志等。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇提高代码效率和可维护性的新窗口。
|
4天前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
24 4
|
3天前
|
测试技术 数据安全/隐私保护 开发者
探索Python中的装饰器:提升代码的灵活性与可维护性
本文深入探讨了Python中装饰器的使用方法及其在软件开发中的重要性。通过实例分析,本文揭示了装饰器如何增强代码的模块化、复用性和可读性,从而帮助开发者编写出更加高效和易于维护的程序。