东方不败
一句话:Trafilatura 把「网页 → 干净正文」这件事做到了「一键可用」的程度,既能当 Python 库嵌入代码,也能当命令行工具批量跑。
一、它解决了什么痛点
复制网页内容时总把导航栏、广告、页脚一起粘过来。
用正则或 BeautifulSoup 写提取规则,换一批站点就失效。
科研/大模型语料需要「纯正文 + 结构化元数据」,手工清洗成本高。
需要批量把几千个 URL 转成 TXT / JSON / XML-TEI,找不到趁手工具。
Trafilatura 的核心任务:
「把任意 HTML 页面 → 仅保留标题、作者、日期、正文、标签等结构化字段,其余噪音全部丢掉」。
二、能力速览
输入:在线 URL / 本地 HTML / WARC / 已解析的 DOM
输出:TXT、Markdown、CSV、JSON、XML、XML-TEI
语言:内置语言检测,支持中文、英文、法文等 30+ 语言
规模:单机多线程,可跑百万级 URL(配合缓存与去重)
扩展:可选插件(速度优化、GUI、语言识别、SEO 模式)
依赖:纯 Python,无需数据库,pip 即可装
三、30 秒安装
# Python ≥3.6 即可 pip install -U trafilatura[all] # [all] 一次性带上所有可选依赖 # 命令行测试 trafilatura --version # 应输出 1.x.xs
四、命令行 3 个高频场景
单页尝鲜:
trafilatura -u https://zhuanfou.com/article/79345768_063
终端直接输出纯文本正文。
整站批量:
# 1) 先拉取站点地图 trafilatura --sitemap https://blog.example.com --list > urls.txt # 2) 批量下载并保存为 txt trafilatura -i urls.txt -o txtfiles/ # 每篇一个文件
搜索引擎结果「去广告」:
trafilatura --links --xml -u "https://bing.com/search?q=gitea"
只保留标题 + 干净 URL,方便后续分析。
五、Python极简API
import trafilatura url = 'https://zhuanfou.com/article/79345768_063' downloaded = trafilatura.fetch_url(url) # 默认输出纯文本 text = trafilatura.extract(downloaded) print(text) # 想要结构化字段 obj = trafilatura.extract(downloaded, output_format='json', with_metadata=True) print(obj) # 含 title、author、date、text、tags 等
六、进阶:自定义+多线程
from trafilatura import fetch_url, extract from concurrent.futures import ThreadPoolExecutor import json URLS = ['https://site-1.com/post/1', 'https://site-2.com/news/2', 'https://site-3.com/blog/3'] def crawl(u): html = fetch_url(u) return extract(html, output_format='json', include_comments=False) with ThreadPoolExecutor(max_workers=8) as ex: results = list(filter(None, ex.map(crawl, URLS))) with open('corpus.jsonl', 'w', encoding='utf8') as f: for r in results: f.write(json.dumps(r, ensure_ascii=False) + '\n')
七、性能 & 精度
官方基准测试(CommonCrawl 子集)
Trafilatura 的 F1 得分领先于 Newspaper3k、Readability、Boilerpipe 等常见库,噪声最低。
单机实测:MacBook M2 下 8 线程 ≈ 1 000 页/分钟(带宽充足时)。
八、常见坑与提示
中文乱码 → 页面未声明编码,加 --encoding utf-8 或先手动 fetch_url。
正文被误判 → 调 favor_precision=True 或 favor_recall=True 自行权衡。
大批量请先 --cache 避免重复下载;配合 URL 去黑名单过滤。
法律合规 → 遵守 robots.txt 与网站版权,科研用途建议保存源码留痕。
九、同类工具横向对比
工具 / 优势 / 劣势
Trafilatura / 精度高、支持 CLI+API、多格式、可批量 / 需要 Python 环境
Newspaper3k / 安装简单 / 中文支持差,维护停滞
Readability-lxml / 老牌算法 / 仅正文,无元数据
Boilerpipe / Java 版稳定 / 无 Python 官方实现,配置繁琐
十、一分钟小结
装:pip install -U trafilatura[all]
跑:trafilatura -u <URL>
批量:trafilatura -i urls.txt -o result/
代码:import trafilatura; text = trafilatura.extract(trafilatura.fetch_url(url))
Trafilatura 把「网页正文提取」做成了「开箱即用」的基础设施——无论是写爬虫、做大模型语料、还是做数字人文的 XML-TEI 语料库,它都能让你把精力放回「数据分析」本身,而不是和 HTML 标签打架。