Python 离线提取注册域名
ailx10说:这篇是我2024年3月写的。用 tldextract 提取域名时,联网环境里一切看着挺自然,换到离线场景,默认下载后缀列表这件小事就成了拦路点。我在网上找了一圈,没有遇到顺手的完整例子,最后干脆把 public_suffix_list.dat 放本地,再调整缓存和 suffix_list_urls。真正容易绊人的不是几行 Python,而是 Linux、macOS 和 Windows 的 file URI 写法。于是我把两种路径都记下来,再用域名做对照。它是一篇为离线交付补上的小笔记,省的是下次再为同一个路径细节绕圈。
tldextract 可以根据 Public Suffix List(PSL)区分域名的子域、注册域和公共后缀。在离线环境中,可显式提供本地后缀列表,避免依赖运行时网络下载。
from pathlib import Path
import tldextract
# 事先准备本地 public_suffix_list.dat;路径以实际环境为准。
psl_file = Path("public_suffix_list.dat").resolve()
extract = tldextract.TLDExtract(
cache_dir=None,
suffix_list_urls=(psl_file.as_uri(),),
fallback_to_snapshot=False,
)
for host in ("www.example.com", "bbs.example.edu.cn"):
result = extract(host)
if result.domain and result.suffix:
print(f"{result.domain}.{result.suffix}")
else:
print(f"无法识别公共后缀:{host}")
Path.as_uri() 会将绝对路径转换为文件 URI,避免手写 Windows 与 Unix 路径时的斜杠差异。这里关闭回退到内置快照,以便本地列表不可用时及时发现问题;不同版本支持的参数应核对安装版本的文档。
PSL 会变化,应定期更新本地列表。是否包含私有后缀会影响某些域名的结果,需要按业务需求配置。注册域名提取不等同于验证域名归属或判断其安全性。
离线能用以后,还得记住清单来自哪一版。注册域名的判断不只是截取最后两段字符串,把规则口径和文件时间一起保存,结果才更容易解释。
本文摘要与文字整理有 AI 参与。
========================if i have some wrong, please give me a message, thx.========================
浙公网安备 33010602011771号