如何从网页中提取“有效内容”?几个 GitHub 开源项目对比
- Trafilatura 是一个 Python 包,适合从网页中提取正文、元数据等,并支持多种格式输出。对于 Python 项目来说,它是一个“开箱即用”的首选工具,特别适用于新闻、博客、文档页面的正文提取。对于动态渲染的网页,建议与 Playwright 配合使用。
- Readability.js 是 Mozilla 提供的一个 JavaScript 库,非常适合 Node.js 生态系统中的文章页正文提取任务,如浏览器插件或前端阅读模式。其效果在处理静态内容时表现稳定。
- Crawl4AI 和 Firecrawl 更侧重于为 AI 应用(如 RAG、知识库构建)准备网页数据,支持动态网页抓取及转换成适合大模型使用的格式(如 Markdown)。Crawl4AI 更适合本地化和轻量化需求,而 Firecrawl 则更适合需要快速集成到产品中的场景。
- 对于专门针对新闻站点的内容抓取,推荐使用 newspaper4k 或 news-please,它们能够有效提取新闻标题、发布时间、作者等特定字段。
- 当需要大规模批量爬取网站并进行数据处理时,可以考虑将 Scrapy 与 Trafilatura 结合使用,前者负责高效地抓取大量网页,后者则专注于高质量的正文提取。
如何从网页中提取“有效内容”?几个 GitHub 开源项目对比
在做 AI 应用、知识库、RAG、网页总结、竞品分析、舆情采集时,我们经常会遇到一个问题:
我拿到了网页 HTML,但里面真正有价值的正文在哪里?
一个网页里除了正文,通常还有导航栏、广告、推荐文章、页脚、评论区、脚本、样式、弹窗等大量噪声。
如果直接把整页 HTML 丢给大模型,不仅浪费 token,还会严重影响回答质量。
所以,网页内容提取的核心不是“把网页下载下来”,而是:
从网页中识别并提取真正有意义的正文、标题、时间、作者、图片、链接和结构化信息。
下面对几个常见的 GitHub 开源项目做一个介绍和对比。
一、Trafilatura:Python 里最值得优先尝试的正文提取工具
Trafilatura 是一个 Python 包和命令行工具,目标是从网页中提取正文、元数据、评论等内容,并把原始 HTML 转成结构化、有意义的数据。它支持网页下载、爬取、正文抽取和多种格式输出。官方说明中提到,它可以输出 TXT、CSV、JSON、HTML、Markdown、XML、XML-TEI 等格式。(GitHub)
它适合这些场景:
网页正文提取
RAG 知识库清洗
文章内容抓取
HTML 转 Markdown / JSON
批量网页文本处理
示例代码
import trafilatura
url = "https://example.com/article"
downloaded = trafilatura.fetch_url(url)
text = trafilatura.extract(downloaded)
print(text)
优点
Trafilatura 的优势是“开箱即用”。你不需要自己写复杂的 CSS selector,也不需要手动判断正文在哪里。对于新闻、博客、文档、文章页,它通常能直接提取出比较干净的文本。
缺点
如果网页是强 JavaScript 动态渲染的,单独用 Trafilatura 可能拿不到完整内容。这时通常需要配合 Playwright,先把网页渲染出来,再交给 Trafilatura 提取。
推荐程度
Python 项目首选。
二、Mozilla Readability.js:Node.js 生态里很经典的正文提取方案
Readability.js 是 Mozilla 提供的独立版本 Readability 库,它和 Firefox Reader View 的思路相关,主要用于从网页中提取适合阅读的正文内容。官方仓库说明它是 Firefox Reader View 所使用的 readability library 的 standalone 版本,并可通过 npm 安装。(GitHub)
它适合这些场景:
Node.js 项目
浏览器插件
前端网页阅读模式
文章正文提取
网页转阅读视图
示例代码
const { Readability } = require("@mozilla/readability");
const { JSDOM } = require("jsdom");
const dom = new JSDOM(html, {
url: "https://example.com/article"
});
const reader = new Readability(dom.window.document);
const article = reader.parse();
console.log(article.title);
console.log(article.textContent);
优点
Readability.js 的逻辑比较经典,特别适合“文章页”的正文提取。比如博客、新闻、媒体文章、文档页面等,它的效果通常比较稳定。
缺点
它更偏“阅读模式抽取”,对于复杂网站、列表页、产品页、动态页面、需要交互加载的页面,能力有限。
推荐程度
Node.js 项目优先考虑。
三、Crawl4AI:面向大模型和 RAG 的网页抓取工具
Crawl4AI 的定位更偏向“大模型友好的网页爬取与内容提取”。官方仓库和文档都强调它是面向 LLM、AI Agent 和数据管道的开源网页爬虫与抽取工具。(GitHub)
它适合这些场景:
网页转 Markdown
RAG 数据采集
AI Agent 浏览网页
动态网页抓取
批量 URL 提取
LLM 友好格式输出
相比 Trafilatura,Crawl4AI 更像是一套“为 AI 应用准备网页数据”的完整方案,而不只是一个正文抽取函数。
优点
它的优势在于更贴近大模型使用场景。比如你不是单纯想提取正文,而是想把网页变成适合喂给大模型的 Markdown、结构化内容或数据块,那么 Crawl4AI 会更顺手。
缺点
它比 Trafilatura 更“重”一些。如果你只是想快速从一个 HTML 中提取正文,Trafilatura 会更轻便。
推荐程度
做 AI 知识库、RAG、Agent 抓网页时非常值得看。
四、Firecrawl:更偏产品化的网页抓取与清洗方案
Firecrawl 的定位是为 AI Agent 提供干净的网页数据。官方仓库描述它可以 search、scrape,并与网页交互,适合大规模网页数据处理;它是开源项目,同时也提供 hosted service。(GitHub)
它适合这些场景:
AI Agent 搜索网页
网页转 Markdown
网页数据 API
SaaS 项目快速接入网页抓取
不想自己维护复杂爬虫基础设施
优点
Firecrawl 更接近“服务化网页抓取”。如果你想快速在产品里接入网页抓取、网页搜索、网页清洗,而不是自己维护 Playwright、代理、反爬、队列等基础设施,它的使用体验会更友好。
缺点
如果你完全想本地化、轻量化、自主可控,Firecrawl 可能不是最轻的方案。它适合工程化和产品化场景,不一定适合一个简单脚本。
推荐程度
适合 AI 产品快速集成网页抓取能力。
五、BoilerPy3:传统网页正文抽取工具
BoilerPy3 是 Boilerpipe 的 Python 移植版本,主要用于去除网页模板噪声,提取正文内容。
它适合这些场景:
正文抽取
去除导航、广告、页脚
传统网页清洗
轻量级 Python 项目
优点
思路简单,使用成本低,适合传统文章网页的正文提取。
缺点
相比 Trafilatura,它的整体生态和输出格式没有那么丰富。对于现代复杂网页,效果可能不如专门面向现代网页清洗的工具。
推荐程度
可以作为备选方案。
六、newspaper4k / news-please:新闻类网页采集工具
如果你的目标是新闻站点,比如抓取新闻标题、发布时间、作者、正文、主图等字段,那么可以考虑 newspaper4k 或 news-please。
它们适合这些场景:
新闻采集
媒体文章抓取
作者、时间、标题、正文提取
新闻数据集构建
优点
它们针对新闻文章做了很多特定处理,不只是提取正文,还会关注标题、作者、发布时间、主图等新闻字段。
缺点
如果你的网页不是新闻文章,而是企业官网、产品页、文档页、论坛页,那么这类工具就不一定合适。
推荐程度
新闻采集场景优先考虑。
七、Scrapy:不是正文提取器,而是爬虫框架
Scrapy 严格来说不是“有效内容提取工具”,而是一个 Python 爬虫框架。
它更适合解决这些问题:
批量 URL 爬取
任务队列
失败重试
请求调度
数据管道
反爬策略
分布式爬虫
如果你的需求只是“给我一个 URL,提取正文”,Scrapy 有点重。
但如果你的需求是“抓取几万个网页,并做入库、去重、重试、调度”,Scrapy 就很适合。
推荐搭配
Scrapy 负责批量爬取
Trafilatura 负责正文清洗
数据库负责存储
向量库负责后续 RAG
总体对比
| 项目 | 语言/生态 | 核心能力 | 适合场景 | 推荐指数 |
|---|---|---|---|---|
| Trafilatura | Python | 正文、元数据、评论、结构化输出 | RAG、知识库、文章提取 | ★★★★★ |
| Readability.js | JavaScript | 阅读模式正文提取 | Node.js、浏览器插件、文章页 | ★★★★☆ |
| Crawl4AI | Python / AI 工程 | LLM 友好网页抓取 | RAG、Agent、动态网页 | ★★★★★ |
| Firecrawl | API / 开源服务 | 网页搜索、抓取、清洗 | AI 产品、SaaS 集成 | ★★★★☆ |
| BoilerPy3 | Python | 网页去噪、正文抽取 | 传统正文提取 | ★★★☆☆ |
| newspaper4k | Python | 新闻正文、作者、时间、图片 | 新闻采集 | ★★★★☆ |
| news-please | Python | 新闻采集与结构化 | 新闻数据集 | ★★★★☆ |
| Scrapy | Python | 大规模爬虫框架 | 批量采集、任务调度 | ★★★★★ |
怎么选?
1. 只是想快速提取网页正文
优先选:
Trafilatura
它简单、直接、适合 Python 项目。
2. 你的项目是 Node.js
优先选:
Mozilla Readability.js
尤其是文章页、博客页、新闻页,效果通常不错。
3. 你要做 RAG / 知识库 / 大模型网页总结
优先选:
Trafilatura
Crawl4AI
Firecrawl
我的建议是:
轻量本地方案:Trafilatura
动态网页方案:Crawl4AI
产品快速集成:Firecrawl
4. 网页是 JavaScript 动态渲染的
可以考虑:
Playwright + Trafilatura
Crawl4AI
Firecrawl
因为这类页面直接 requests 请求到的 HTML 可能只有一个空壳,真正内容需要浏览器执行 JavaScript 后才会出现。
5. 要大规模爬取网站
推荐组合:
Scrapy + Trafilatura
Scrapy 负责爬,Trafilatura 负责提取正文。
推荐落地方案
如果你正在做一个 AI 产品,比如:
网页总结
AI 知识库
竞品分析
网页问答
标书资料采集
行业信息监控
可以这样设计:
URL 输入
↓
判断是否动态网页
↓
静态网页:requests / trafilatura.fetch_url
动态网页:Playwright / Crawl4AI
↓
正文提取:Trafilatura / Crawl4AI
↓
清洗:去重、去导航、去广告、去无关链接
↓
切分 chunk
↓
向量化
↓
存入向量库
↓
用于 RAG 问答或总结
最后的建议
如果你是刚开始做网页有效内容提取,不建议一上来就搭很复杂的爬虫系统。
最稳妥的路线是:
第一步:先用 Trafilatura 跑通单网页正文提取
第二步:遇到动态网页,再接 Playwright 或 Crawl4AI
第三步:需要批量采集,再引入 Scrapy
第四步:做产品化服务,再考虑 Firecrawl
简单说:
Python 项目先试 Trafilatura;Node.js 项目先试 Readability.js;AI/RAG 项目重点看 Crawl4AI 和 Firecrawl;大规模采集再上 Scrapy。