You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断DataFrame中各URL所属的网站根域名?

精准提取URL根域名的解决方案(适配DataFrame批量处理)

嘿,我刚好踩过这个坑——之前处理过一堆带深层路径的URL,要提取正确的根域名(比如https://www.mordgpi.ru/our-life/news/46/55116/得拿到mordgpi.ru,而不是gpi.ru),简单的字符串拆分完全不靠谱,得用专门的方法来搞。

首选方案:用tldextract库一键搞定

这个库是专门干这个的,内置了公共后缀列表(Public Suffix List)——就是那种记录了所有合法顶级/公共后缀的清单,能准确区分像ru、co.uk这类不同层级的后缀,完美解决你的需求。

第一步:安装库

pip install tldextract

第二步:批量处理DataFrame

假设你的DataFrame叫url_df,有一列存URL的字段叫url,直接写个函数批量应用就行:

import tldextract
import pandas as pd

def get_root_domain(url):
    # 提取域名各部分:子域名、主域名、公共后缀
    extracted = tldextract.extract(url)
    # 拼接主域名和公共后缀,就是我们要的根URL
    return f"{extracted.domain}.{extracted.suffix}"

# 给DataFrame新增一列存根域名
url_df['root_domain'] = url_df['url'].apply(get_root_domain)

测试几个真实场景:

  • 输入http://www.agpu.net/ → 输出agpu.net
  • 输入https://www.mordgpi.ru/our-life/news/46/55116/ → 输出mordgpi.ru
  • 输入https://shop.example.co.uk/products/123 → 输出example.co.uk(正确识别co.uk是公共后缀,不会拆成co.uk或者uk)

备选方案:手动实现(不依赖第三方库)

如果不想加新的依赖,你可以自己维护一个公共后缀的集合,然后从右往左遍历域名分段来判断。不过这个方法需要定期更新后缀列表,不如库省心,适合特殊场景:

# 这里只放了几个常见后缀,实际要用到完整的公共后缀列表哦
PUBLIC_SUFFIXES = {'ru', 'net', 'org', 'co.uk', 'com.au'}

def get_root_domain_manual(url):
    from urllib.parse import urlparse
    # 先解析URL,拿到域名部分(处理带/不带协议的情况)
    parsed = urlparse(url)
    domain = parsed.netloc or parsed.path
    # 把域名拆成小段,比如 www.mordgpi.ru → ['www', 'mordgpi', 'ru']
    parts = domain.split('.')
    
    # 从右往左找公共后缀
    suffix_parts = []
    while parts and '.'.join(suffix_parts + [parts[-1]]) in PUBLIC_SUFFIXES:
        suffix_parts.insert(0, parts.pop())
    
    # 拼接主域名和公共后缀
    if parts and suffix_parts:
        return f"{parts[-1]}.{'.'.join(suffix_parts)}"
    # 处理异常情况(比如无效URL)
    return domain

几个关键提醒

  • 要兼容各种URL格式:带/不带http/https、带/不带www、深层路径、甚至没有协议的纯域名
  • tldextract的公共后缀列表会更新,如果你需要最新的规则,可以运行tldextract.update()来同步
  • 批量处理时记得加异常捕获,比如碰到无效URL不会整个流程崩掉:
    def get_root_domain_safe(url):
        try:
            extracted = tldextract.extract(url)
            return f"{extracted.domain}.{extracted.suffix}"
        except:
            return None  # 或者返回原始URL,根据需求调整
    

内容的提问来源于stack exchange,提问作者Nikita Popov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:19:18