跳转到主要内容

使用公共后缀列表获取域名公共后缀。从publicsuffix包分叉并使用相同的API。

项目描述

此模块允许您使用来自http://publicsuffix.org的公共后缀列表获取域名的公共后缀以及可注册域名。

公共后缀是您可以注册域名或在其中后缀所有者不控制子域的域名后缀。前一个例子中公共后缀的例子有“.com”,“.co.uk”和“pvt.k12.wy.us”;后者的情况的例子有“github.io”和“blogspot.com”。公共后缀有时也称为有效或扩展顶级域(eTLD)。准确知道域名的公共后缀在处理网络浏览器cookies、在用户界面中突出显示域名最重要的部分或按网站对URL进行排序时非常有用。它还用于广泛的研究和应用,这些研究与应用利用域名系统(DNS)数据。

此模块以Trie结构构建公共后缀列表,使其比用于同一目的的其他基于字符串的模块更高效。它可以在PySpark等大规模分布式环境中有效地使用。

此Python模块包含公共后缀列表(PSL)的副本,因此可以直接使用。较新版本尝试提供该列表的合理新鲜副本。它还包括一个方便的方法来获取最新列表。PSL会定期更改。

代码是publicsuffix包的分支,包含相同的基API。此外,它包含一些针对某些用例有用的变体,例如忽略通配符或仅返回扩展顶级域(eTLD)的选项。您只需导入publicsuffix2即可。

公共后缀列表现在以UTF-8格式提供。为了正确处理IDNA编码的域名,查询或列表必须进行转换。默认情况下,模块会转换PSL。如果您的用例包括UTF-8域名,例如“食狮.com.cn”,您需要在实例化时将IDNA编码标志设置为False(请参见以下示例)。如果未使用正确的编码处理您的用例,则可能导致使用unicode字符的域名结果不正确。

代码是MIT许可的,公共后缀数据列表是MPL-2.0许可的。

用法

使用以下命令安装

pip install publicsuffix2

该模块提供了获取FQDN的基础域名或sld的功能,以及获取仅公共后缀的功能。此外,它还提供了一些布尔参数来控制如何处理通配符。除了函数外,该模块还公开了一个解析PSL的类,允许对单个域名进行更多控制。

该模块提供了两个等效函数来查询域名,并返回基础域名或二级域名;get_public_suffix()和get_sld()。

>>> from publicsuffix2 import get_public_suffix
>>> get_public_suffix('www.example.com')
'example.com'
>>> get_sld('www.example.com')
'example.com'
>>> get_public_suffix('www.example.co.uk')
'example.co.uk'
>>> get_public_suffix('www.super.example.co.uk')
'example.co.uk'
>>> get_sld("co.uk")  # returns eTLD as is
'co.uk'

此函数加载并缓存公共后缀列表。要获取PSL的最新版本,请使用fetch()函数首先下载最新版本。或者,您也可以传递一个自定义列表。

为了进行更多控制,还有一个类可以解析公共后缀列表,并允许对单个域名进行相同的查询。

>>> from publicsuffix2 import PublicSuffixList
>>> psl = PublicSuffixList()
>>> psl.get_public_suffix('www.example.com')
'example.com'
>>> psl.get_public_suffix('www.example.co.uk')
'example.co.uk'
>>> psl.get_public_suffix('www.super.example.co.uk')
'example.co.uk'
>>> psl.get_sld('www.super.example.co.uk')
'example.co.uk'

请注意,URL的host部分可能包含不是纯DNS域名字符串的字符串(IP地址、Punycode编码的名称、与端口号或用户名结合的名称等)。确保只将域名传递给get_public_suffix()方法的任务在于调用者。

get_public_suffix()函数和PublicSuffixList类初始化器接受一个可选参数,指向公共后缀文件。这可以是文件路径、公共后缀行可迭代的集合,或指向已打开列表的文件-like对象。

>>> from publicsuffix2 import get_public_suffix
>>> psl_file = 'path to some psl data file'
>>> get_public_suffix('www.example.com', psl_file)
'example.com'

请注意,当使用get_public_suffix()时,全局缓存会保留提供的最新后缀列表数据。这将使用上面加载的缓存最新版本。

>>> get_public_suffix('www.example.co.uk')
'example.co.uk'

IDNA编码。 公共后缀列表现在以UTF-8格式存在。对于包含IDNA编码域的用例,必须进行转换。Publicsuffix2模块在PublicSuffixList初始化时将idna编码作为一个参数,默认为true。对于UTF-8用例,将idna参数设置为False。

>>> from publicsuffix2 import PublicSuffixList
>>> psl = PublicSuffixList(idna=True)  # on by default
>>> psl.get_public_suffix('www.google.com')
'google.com'
>>> psl = PublicSuffixList(idna=False)  # use UTF-8 encodings
>>> psl.get_public_suffix('食狮.com.cn')
'食狮.com.cn'

忽略通配符。 在某些用例中,尤其是与大规模域名处理相关的用例,用户可能希望忽略通配符以创建更多的聚合。这可以通过将参数wildcard设置为False来实现。

>>> psl.get_public_suffix('telinet.com.pg', wildcard=False)
'com.pg'
>>> psl.get_public_suffix('telinet.com.pg', wildcard=True)
'telinet.com.pg'

要求有效的eTLDs(严格)。 在publicsuffix2模块中,具有无效TLD的域仍然会返回基本域,例如:

>>> psl.get_public_suffix('www.mine.local')
'mine.local'

这适用于许多用例,而在其他用例中,我们希望确保域包含有效的eTLD。在这种情况下,布尔参数strict提供了一个解决方案。如果设置了此标志,无效的TLD将返回None。

>>> psl.get_public_suffix('www.mine.local', strict=True) is None
True

仅返回eTLD。 publicsuffix2的标准用例是根据公共后缀列表返回可注册的或基本域名。然而,在某些情况下,我们只想找到eTLD本身。这可以通过get_tld()方法实现。

>>> psl.get_tld('www.google.com')
'com'
>>> psl.get_tld('www.google.co.uk')
'co.uk'

所有方法和函数都包含wildcard和strict参数。

为了方便起见,提供了公共方法get_sld()。此方法与get_public_suffix()方法相同,旨在澄清某些用户的输出。

更新捆绑的后缀列表,请使用提供的setup.py命令。

python setup.py update_psl

更新后的列表将保存在src/publicsuffix2/public_suffix_list.dat中,您可以使用此捆绑数据构建新的wheel。

或者,有一个fetch()函数可以从https://publicsuffix.org/list/public_suffix_list.dat获取公共后缀数据的最新版本。您可以这样使用:

>>> from publicsuffix2 import get_public_suffix
>>> from publicsuffix2 import fetch
>>> psl_file = fetch()
>>> get_public_suffix('www.example.com', psl_file)
'example.com'

请注意,一旦加载,数据文件将被缓存,因此只获取一次。

提取的公共后缀列表(即TLD及其修饰符)被放入实例变量tlds中,可以通过属性tlds访问。

>>> psl = PublicSuffixList()
>>> psl.tlds[:5]
['ac',
'com.ac',
'edu.ac',
'gov.ac',
'net.ac']

在大规模处理中使用模块 如果在大型pyspark处理中使用此库,您应将类实例化为全局变量,而不是在用户函数内。然后可以在用户函数中用于分布式处理。

来源

获取本地开发仓库副本。开发活动在develop分支进行。稳定版本在master分支上标记。

git clone https://github.com/nexB/python-publicsuffix2.git

历史

此代码是从Tomaž Šolc的David Wilson代码分支中fork出来的。

Tomaž Šolc的代码最初位于

https://www.tablix.org/~avian/git/publicsuffix.git

版权所有 (c) 2014 Tomaž Šolc <tomaz.solc@tablix.org>

David Wilson的代码最初位于

http://code.google.com/p/python-public-suffix-list/

版权所有 (c) 2009 David Wilson

许可证

该代码是MIT许可的。Mozilla的捆绑公共后缀列表数据受MPL-2.0许可。

版权所有 (c) 2015 nexB Inc. 及其他。

版权所有 (c) 2014 Tomaž Šolc <tomaz.solc@tablix.org>

版权所有 (c) 2009 David Wilson

特此授予任何人免费获取此软件及其相关文档文件(“软件”)的副本的权利,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件的人这样做,受以下条件约束:

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

本软件按照“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是因为合同、侵权或其他原因,无论是由于软件本身、软件的使用或其他与软件有关的活动而产生的。

变更日志

2019-12-19 publicsuffix2 2.20191219

  • 由@hiratara添加了get_tld()的新严格模式。

  • 更新TLD列表

  • 添加了Mozilla测试套件中的测试

2019-08-12 publicsuffix2 2.20190812

  • 修复了可用tlds中的回归问题。

  • 格式化和简化代码。

2019-08-11 publicsuffix2 2.20190811

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

2019-08-08 publicsuffix2 2.20190808

  • 添加了附加功能并处理了PSL格式的更改

  • 添加属性以检索作为列表的PSL

2019-02-05 publicsuffix2 2.201902051213

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

  • 根据普遍要求恢复了fetch()函数

2018-12-13 publicsuffix2 2.20181213

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

2018-10-01 publicsuffix2 2.20180921.2

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

  • API破坏性变更:publicsuffix模块重命名为publicsuffix2

2016-08-18 publicsuffix2 2.20160818

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

2016-06-21 publicsuffix2 2.20160621

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

  • 采用新的版本方案:major.<publisiffix列表日期>

2015-10-12 publicsuffix2 2.1.0

  • 合并了publicsuffix的最新更新

  • 添加了新的便利顶级get_public_suffix_function,如果需要,则缓存加载的列表。

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

  • 添加了update_psl设置命令以获取和提供最新列表。用法:python setup.py update_psl

2015-06-04 publicsuffix2 2.0.0

  • 从publicsuffix分支,但保持了相同的API

  • 将publicsuffix.file更新为来自Mozilla的最新版本。

  • 更改打包方式,使后缀列表成为包数据并适用于wheel。

  • 使用空格缩进,而不是制表符

2014-01-14 publicsuffix 1.0.5

  • 正确处理完全限定域名(感谢Matthäus Wander)。

  • 将publicsuffix.txt更新为来自Mozilla的最新版本。

2013-01-02 publicsuffix 1.0.4

  • 添加了缺失的变更日志。

2013-01-02 publicsuffix 1.0.3

  • 将publicsuffix.txt更新为来自Mozilla的最新版本。

  • 添加了trove分类器。

  • README的轻微更新。

2011-10-10 publicsuffix 1.0.2

  • 与Python 3.x(感谢Joern Koerner)和Python 2.5兼容

2011-09-22 publicsuffix 1.0.1

  • 修复了在virtualenv下安装的问题(感谢Mark McClain)

2011-07-29 publicsuffix 1.0.0

  • 首次发布

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源分发

publicsuffix2-2.20191221.tar.gz (99.6 kB 查看哈希值)

上传时间

构建分发

publicsuffix2-2.20191221-py2.py3-none-any.whl (89.0 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面