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

使用Python从拦截列表文本文件中提取FQDN并实现去重排序

实现思路

  • 逐行处理抓取到的文本内容,先删除所有#开头的注释行以及行内#后的注释内容
  • 过滤掉IP前缀(127.0.0.1、0.0.0.0),提取后续的域名部分
  • 用简单的正则匹配验证提取的内容是否符合FQDN格式规则,避免误抓无效内容
  • 用集合自动去重,再按字母顺序排序后输出到最终文件

优化后可直接运行的完整代码

#!/usr/bin/env python3
import urllib.request
import re

# 简化版FQDN匹配正则,适配拦截列表场景的域名识别需求
FQDN_PATTERN = re.compile(r'^(?=.{1,253}$)(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,63}$')

if __name__ == '__main__':
    # 读取URL列表,自动跳过空行
    with open("blocklist_urls.txt", "r", encoding="utf-8") as f:
        urls = [u.strip() for u in f.readlines() if u.strip()]
    
    domain_set = set()
    # 逐URL抓取并提取域名
    for url in urls:
        try:
            resp = urllib.request.urlopen(url, timeout=10)
            content = resp.read().decode("utf-8")
            # 逐行处理内容
            for line in content.splitlines():
                # 去掉行内注释和首尾空白
                raw_line = line.split('#', 1)[0].strip()
                if not raw_line:
                    continue
                # 分割行内容,取最后一段作为候选域名(同时适配带IP前缀/纯域名两种格式)
                candidate = raw_line.split()[-1].strip()
                # 验证格式符合FQDN后加入集合自动去重
                if FQDN_PATTERN.match(candidate):
                    domain_set.add(candidate.lower())
        except Exception as e:
            print(f"处理URL {url} 时出错:{str(e)},已跳过该URL")
    
    # 按字母顺序排序域名
    sorted_domains = sorted(domain_set)
    
    # 写入最终结果文件
    with open("blocklist_final.txt", "w", encoding="utf-8") as f:
        for domain in sorted_domains:
            f.write(f"{domain}\n")
    
    print(f"处理完成,共提取有效域名 {len(sorted_domains)} 个,已保存到 blocklist_final.txt")

代码优化说明

  • 去掉了原有代码中反复修改sys.stdout、多次读写中间文件的冗余逻辑,全程在内存中处理去重排序,执行效率更高
  • 增加了异常捕获逻辑,单个URL抓取/解析失败不会导致整个脚本中断
  • 用正则验证域名格式,比单纯判断点的数量准确率更高,不会误抓IP、含特殊字符的无效内容
  • 自动将域名转为小写,避免大小写差异导致的重复域名
  • 适配你给出的所有拦截列表格式:带127.0.0.1前缀、带0.0.0.0前缀、无前缀纯域名、行尾带注释的域名都可以正确提取

内容的提问来源于stack exchange,提问作者Mr. Clean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:06:04