Trafilatura 入门:从 HTML 到结构化文本的最短路径
三行代码从网页提取正文和元数据,支持 TXT/Markdown/JSON/CSV/XML 多种输出格式。
亿牛云技术团队2026年4月21日2 分钟阅读
安装
pip install trafilatura
验证安装:
import trafilatura
print(trafilatura.__version__)
三行代码提取正文
import trafilatura
downloaded = trafilatura.fetch_url("https://example.com/article")
result = trafilatura.extract(downloaded)
print(result)
fetch_url() 下载 HTML,extract() 提取正文,返回纯文本。
提取结构化数据
import trafilatura
downloaded = trafilatura.fetch_url("https://example.com/article")
result = trafilatura.extract(downloaded, output_format="json", with_metadata=True)
print(result)
输出 JSON 格式,包含元数据:
{
"title": "文章标题",
"author": "作者名",
"date": "2026-06-16",
"categories": ["技术"],
"tags": ["Python", "爬虫"],
"text": "正文内容..."
}
支持的输出格式
| 格式 | 参数值 | 适用场景 |
|---|---|---|
| 纯文本 | txt(默认) | NLP 语料、全文搜索 |
| Markdown | markdown | 博客导入、文档整理 |
| JSON | json | 程序化处理、API 输出 |
| CSV | csv | 表格数据分析 |
| XML | xml | XML 管线集成 |
| XML-TEI | xmltei | 学术/数字人文标准格式 |
提取更多字段
import trafilatura
downloaded = trafilatura.fetch_url("https://example.com/article")
result = trafilatura.extract(
downloaded,
output_format="json",
with_metadata=True, # 标题/作者/日期/分类/标签
include_comments=True, # 包含评论区内容
include_tables=True, # 包含表格
include_images=False, # 排除图片链接
include_formatting=True, # 保留加粗/斜体标记
)
| 参数 | 默认值 | 作用 |
|---|---|---|
with_metadata | False | 提取标题、作者、日期、分类、标签 |
include_comments | False | 是否提取评论区文本 |
include_tables | True | 是否提取表格内容 |
include_images | False | 是否包含图片 alt 文本和链接 |
include_formatting | False | 是否在 Markdown 中保留加粗/斜体 |
include_links | False | 是否包含超链接 |
结合代理使用
目标站可能有反爬限制,需要配置代理:
# 使用 curl 验证代理链路
curl -x http://user:pass@proxy.16yun.cn:8888 https://httpbin.org/ip
在代码中通过环境变量或 requests 会话设置代理:
import trafilatura
import requests
session = requests.Session()
session.proxies = {
"http": "http://user:pass@proxy.16yun.cn:8888",
"https": "http://user:pass@proxy.16yun.cn:8888",
}
# 使用自定义 session 下载
downloaded = trafilatura.fetch_url("https://example.com/article")
# 或用 requests 手动下载后传入
response = session.get("https://example.com/article")
response.encoding = "utf-8"
result = trafilatura.extract(response.text, output_format="markdown")
print(result)
配合亿牛云产品的推荐方案
| 场景 | 代理产品 | 配置方式 |
|---|---|---|
| 单篇测试 | 爬虫代理 | http://user:pass@proxy.16yun.cn:8888 |
| 批量采集 | API 代理 | 先提取 IP 列表,每次请求随机选一个 |
| 长期任务 | 独享代理 | 固定出口 IP,配合重试策略 |
CLI 使用
Trafilatura 自带命令行工具,无需写 Python:
# 提取单页正文
trafilatura -u https://example.com/article
# 输出 Markdown
trafilatura -u https://example.com/article --output-format markdown
# 输出 JSON 含元数据
trafilatura -u https://example.com/article --output-format json --with-metadata
常见问题
提取结果为空
- 目标站可能使用了 JavaScript 渲染页面(SPA 应用),Trafilatura 只能处理静态 HTML
- 先查看页面源代码确认内容是否在 HTML 中:
curl -s https://example.com | head -100 - 如果内容由 JS 动态生成,需要用 CloakBrowser 渲染后再提取(见本系列第 6 篇)
请求被拦截
- 确认代理配置正确,用 curl 验证
- 部分 CDN 会拦截非浏览器请求,可设置 User-Agent:
session.headers.update({"User-Agent": "Mozilla/5.0 ..."})
中文字符乱码
- 确保 response.encoding 设置正确,或用 requests 自动检测
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。