专否 写文章

东方不败

Oct 3, 2025
Follow

trafilatura:网页内容提取

一句话: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 标签打架。

喜欢这个文章 | 分享 | 新建跟帖