跳转到主要内容

publicsuffixlist实现

项目描述

publicsuffixlist

公共后缀列表的Python 3.5+解析器。

  • 符合测试数据
  • 支持IDN(Unicode和Punycode)。
  • 支持Python3.5+
  • 包含内置PSL和更新脚本。
  • 使用纯Python编写,无库依赖。

publish package CI test PyPI version Downloads

安装

可以使用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。

源码/链接

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

publicsuffixlist-1.0.2.20241003.tar.gz (104.5 kB 查看散列值)

上传时间

构建分发

publicsuffixlist-1.0.2.20241003-py2.py3-none-any.whl (104.2 kB 查看散列值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面