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 语料、全文搜索
Markdownmarkdown博客导入、文档整理
JSONjson程序化处理、API 输出
CSVcsv表格数据分析
XMLxmlXML 管线集成
XML-TEIxmltei学术/数字人文标准格式

提取更多字段

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_metadataFalse提取标题、作者、日期、分类、标签
include_commentsFalse是否提取评论区文本
include_tablesTrue是否提取表格内容
include_imagesFalse是否包含图片 alt 文本和链接
include_formattingFalse是否在 Markdown 中保留加粗/斜体
include_linksFalse是否包含超链接

结合代理使用

目标站可能有反爬限制,需要配置代理:

# 使用 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 自动检测

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。