publicsuffixlist实现
项目描述
publicsuffixlist
公共后缀列表的Python 3.5+解析器。
- 符合测试数据
- 支持IDN(Unicode和Punycode)。
- 支持Python3.5+
- 包含内置PSL和更新脚本。
- 使用纯Python编写,无库依赖。
安装
可以使用pip
安装publicsuffixlist
。
$ pip install publicsuffixlist
用法
基本用法
from publicsuffixlist import PublicSuffixList
psl = PublicSuffixList()
# Uses built-in PSL file
print(psl.publicsuffix("www.example.com")) # "com"
# the longest public suffix part
print(psl.privatesuffix("www.example.com")) # "example.com"
# the shortest domain assigned for a registrant
print(psl.privatesuffix("com")) # None
# Returns None if no private (non-public) part found
print(psl.publicsuffix("www.example.unknownnewtld")) # "unknownnewtld"
# New TLDs are valid public suffix by default
print(psl.publicsuffix("www.example.香港")) #"香港"
# Accepts unicode
print(psl.publicsuffix("www.example.xn--j6w193g")) # "xn--j6w193g"
# Accepts Punycode IDNs by default
print(psl.privatesuffix("WWW.EXAMPLE.COM")) # "example.com"
# Returns in lowercase by default
print(psl.privatesuffix("WWW.EXAMPLE.COM", keep_case=True) # "EXAMPLE.COM"
# kwarg `keep_case=True` to disable the case conversion
最新的PSL每天打包一次。如果您需要解析自己的版本,可以将其作为文件-like可迭代对象传递,或直接作为str
with open("latest_psl.dat", "rb") as f:
psl = PublicSuffixList(f)
unittest和PSL更新器可以作为模块调用。
$ python -m publicsuffixlist.test
$ python -m publicsuffixlist.update
其他便捷方法
print(psl.is_private("example.com")) # True
print(psl.is_public("example.com")) # False
print(psl.privateparts("aaa.www.example.com")) # ("aaa", "www", "example.com")
print(psl.subdomain("aaa.www.example.com", depth=1)) # "www.example.com"
限制
域名标签验证
publicsuffixlist
不提供域名和标签验证。在DNS协议中,大多数8位字符都可作为域名标签接受。而符合ICANN规范的注册机构不接受包含下划线(_)的域名,但主机名可以包含它们。例如,DMARC记录可以包含下划线。用户必须根据其特定上下文确认输入的域名是有效的。
Punycode处理
部分编码的(Unicode-mixed)Punycode不支持,因为Punycode编码/解码非常慢且编码结果不可预测。如果您不确定输入是否为有效的Punycode,应使用:unknowndomain.encode("idna").decode("ascii")
。此方法,转换为idna是幂等的。
处理任意二进制
如果您需要接受任意或恶意的二进制数据,它可以作为一个字节数组元组传递。请注意,返回的字节数组可能包含无法解码或表示为标准域名的字节模式。示例
psl.privatesuffix((b"a.a", b"a.example\xff", b"com")) # (b"a.example\xff", b"com")
# Note that IDNs must be punycoded when passed as tuple of bytes.
psl = PublicSuffixList("例.example")
psl.publicsuffix((b"xn--fsq", b"example")) # (b"xn--fsq", b"example")
# UTF-8 encoded bytes of "例" do not match.
psl.publicsuffix((b"\xe4\xbe\x8b", b"example")) # (b"example",)
许可证
- 本模块遵循Mozilla公共许可证2.0。
- 由Mozilla基金会维护的公共后缀列表遵循Mozilla公共许可证2.0。
- PSL测试用例数据集属于公有领域(CC0)。
开发/打包
本模块及其打包工作流程由作者维护的位于https://github.com/ko-zu/psl的仓库中。
一个包含最新PSL文件的全新包将自动生成并上传到PyPI。版本号中的最后一部分表示发布日期。例如,0.10.1.20230331
表示2023年3月31日的发布日期。
该包在2024年6月的1.0.0版本发布时放弃了Python 2.7和Python 3.4或更早版本的兼容性。在Python 2.x上工作的最后一个版本是0.10.0.x。
源码/链接
- GitHub仓库: (https://github.com/ko-zu/psl)
- PyPI: (https://pypi.ac.cn/project/publicsuffixlist/)
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
散列值 for publicsuffixlist-1.0.2.20241003-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 4fdd9034aeba3dfc81515a5b1eae1eb461b7a5d63a7e0a5ac215fbd53d505e65 |
|
MD5 | eadd7282b54a6bb123b9ecb3a2ae376e |
|
BLAKE2b-256 | 7912788f0a599138501ea2891859885a0868490d15a31c934b94af4b89e56956 |