Crawl4AI:把网页直接变成大模型爱读的 Markdown
写在前面:RAG 缺的不是网页,而是干净网页
很多人做知识库和 Agent 时,以为“数据越多越好”。
于是直接把网页丢给模型:
整页 HTML;
导航栏;
广告;
页脚;
推荐文章;
Cookie 弹窗;
无关链接;
脚本和样式。
结果很快就会发现:
模型抓不到重点;
知识库检索命中一堆无关内容;
网页表格结构丢失;
正文标题层级混乱;
同一页面重复内容太多;
Token 成本被脏数据浪费。
Crawl4AI 解决的是这个问题:把网页变成适合大模型、RAG 和 Agent 使用的干净 Markdown。
它和 MarkItDown 很适合组成一个系列:
MarkItDown:把 PDF / Word / PPT / Excel 变成 Markdown;
Crawl4AI:把网页变成 Markdown。
截至 2026-06-11,我查到的 GitHub 页面信息大致如下:
| 指标 | 数据 |
|---|---|
| GitHub Star | 约 68.2k |
| Fork | 约 7k |
| Open Issues | 约 21 |
| 主要语言 | Python |
| License | Apache-2.0 |
| 最新 Release | v0.8.9 |
| Release 日期 | 2026-06-04 |
| 官方描述 | Open-source LLM Friendly Web Crawler & Scraper |
| README 定位 | Turns the web into clean, LLM ready Markdown for RAG, agents, and data pipelines |

一句话结论:
如果你正在做 RAG,却发现网页资料进库后回答很乱,Crawl4AI 值得优先尝试。
本文实战口径
本文不写成爬虫理论课,而是按真实知识库建设流程来:
| 阶段 | 要解决的问题 |
|---|---|
| 理解 | Crawl4AI 和普通爬虫有什么区别 |
| 安装 | Python 环境怎么准备 |
| 跑通 | 抓一个网页输出 Markdown |
| 判断 | 怎么看输出质量好不好 |
| 扩展 | 抽正文、表格、链接、截图 |
| 入库 | 怎么接到 RAG 知识库 |
| 安全 | robots、反爬、SSRF、代理和敏感数据 |
一、Crawl4AI 到底解决什么问题
普通爬虫一般关心:
页面能不能访问;
HTML 能不能拿到;
selector 能不能匹配;
数据字段能不能抽出来。
而 AI 知识库更关心:
正文是否干净;
标题层级是否清楚;
表格是否保留;
链接是否可追溯;
输出是否适合切块;
模型读起来是否省 token。
这就是 Crawl4AI 和传统爬虫的区别。
1.1 普通爬虫 vs LLM-friendly 爬虫
| 对比项 | 普通爬虫 | Crawl4AI |
|---|---|---|
| 目标 | 抓字段、抓 HTML | 输出 AI 友好的 Markdown |
| 关注点 | selector、请求、解析 | 正文、结构、RAG、Agent |
| 输出 | HTML / JSON / 自定义字段 | Markdown / 元数据 / 可扩展结果 |
| 浏览器能力 | 视实现而定 | 支持浏览器相关流程 |
| 适合场景 | 电商价格、结构化采集 | 知识库、网页资料整理、Agent 阅读网页 |
1.2 为什么是 Markdown
Markdown 对 AI 很友好:
# 标题能保留层级;
- 列表能保留步骤;
| 表格 | 能保留结构 |
[链接](url) 能保留来源;
纯文本比 HTML 更省 token。
把网页变成 Markdown,不是为了排版好看,而是为了后续:
切块;
检索;
引用;
总结;
问答;
Agent 规划。
二、本地安装
建议使用 Python 虚拟环境。
mkdir crawl4ai-demo
cd crawl4ai-demo
python -m venv .venv
Windows PowerShell:
.\.venv\Scripts\Activate.ps1
macOS / Linux:
source .venv/bin/activate
安装 Crawl4AI:
pip install -U crawl4ai
运行安装后设置:
crawl4ai-setup
检查环境:
crawl4ai-doctor
如果遇到浏览器相关问题,可以按官方 README 手动安装 Chromium:
python -m playwright install --with-deps chromium
三、第一个任务:抓网页并输出 Markdown
新建 first_crawl.py:
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://docs.crawl4ai.com/")
print(result.markdown[:2000])
if __name__ == "__main__":
asyncio.run(main())
运行:
python first_crawl.py
如果正常,你会看到一段 Markdown 文本,而不是一整坨 HTML。
四、转换结果怎么判断好不好
不要只看“有没有输出”。要看输出是否适合 AI 使用。
可以按 6 个标准检查:
| 标准 | 好结果 | 差结果 |
|---|---|---|
| 标题层级 | #、## 清楚 | 全部挤成一段 |
| 正文干净 | 少广告、少导航 | 页脚、菜单、推荐全混进来 |
| 表格保留 | Markdown 表格可读 | 表格散成乱码 |
| 链接可追溯 | 重要链接保留 | 来源丢失 |
| Token 友好 | 内容紧凑 | 大量重复内容 |
| 可切块 | 按章节自然分段 | 无结构,难切 |
建议把输出保存成文件:
import asyncio
from pathlib import Path
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://docs.crawl4ai.com/")
Path("crawl4ai-docs.md").write_text(result.markdown, encoding="utf-8")
if __name__ == "__main__":
asyncio.run(main())
五、批量抓取多个页面
真实知识库通常不是一个页面,而是一组文档页面。
可以先准备 urls.txt:
https://docs.crawl4ai.com/
https://docs.crawl4ai.com/core/quickstart/
https://docs.crawl4ai.com/core/simple-crawling/
再写批量脚本:
import asyncio
from pathlib import Path
from urllib.parse import urlparse
from crawl4ai import AsyncWebCrawler
def filename_from_url(url: str) -> str:
parsed = urlparse(url)
path = parsed.path.strip("/").replace("/", "_") or "index"
return f"{parsed.netloc}_{path}.md"
async def main():
urls = Path("urls.txt").read_text(encoding="utf-8").splitlines()
urls = [url.strip() for url in urls if url.strip()]
output_dir = Path("output")
output_dir.mkdir(exist_ok=True)
async with AsyncWebCrawler() as crawler:
for url in urls:
result = await crawler.arun(url=url)
out = output_dir / filename_from_url(url)
out.write_text(result.markdown, encoding="utf-8")
print(f"saved: {out}")
if __name__ == "__main__":
asyncio.run(main())
这个脚本先够用。等你确认质量后,再考虑并发、重试、缓存、代理和站点地图。
六、接入 RAG 知识库前,不要急着入库
网页转成 Markdown 后,建议再做一层清洗。
6.1 建议加元数据
每个 Markdown 文件顶部加:
---
source_url: https://docs.example.com/page
source_type: web
crawled_at: 2026-06-11
project: product_docs
version: 2026-06
---
这样后续回答可以追溯来源。
6.2 清理无关内容
常见要清理:
导航菜单;
版权页脚;
重复推荐;
社交分享按钮;
Cookie 文案;
无关广告;
过短片段;
空标题。
6.3 入库流程建议
网页列表
-> Crawl4AI 抓取
-> Markdown 文件
-> 清洗和加元数据
-> 按标题切块
-> 向量化
-> 导入 Dify / Open WebUI / 自研 RAG
-> 问答评估
七、和 MarkItDown 怎么搭配
如果你已经看过 MarkItDown,那可以这样理解:
| 数据来源 | 推荐工具 |
|---|---|
| MarkItDown | |
| Word | MarkItDown |
| PPT | MarkItDown |
| Excel | MarkItDown |
| HTML 页面 | Crawl4AI |
| 在线文档站 | Crawl4AI |
| 官网帮助中心 | Crawl4AI |
企业知识库经常同时有两类资料:
内部文档:PDF / Word / Excel;
外部资料:官网、帮助中心、开发者文档、公告页。
这时可以组合:
MarkItDown 清洗文件;
Crawl4AI 清洗网页;
统一变成 Markdown;
再进入同一个 RAG 流程。
八、安全边界和合规提醒
网页采集不是“能访问就随便抓”。
至少要注意:
8.1 robots 和网站条款
抓取前先看:
robots.txt;
网站服务条款;
是否允许自动化访问;
是否涉及版权内容。
8.2 反爬和访问频率
不要高频打爆别人网站。
建议:
设置合理间隔;
限制并发;
失败重试要有上限;
尊重 robots;
不要绕过付费墙和登录保护。
8.3 SSRF 风险
如果你把 Crawl4AI 做成一个服务,让用户提交 URL,就必须防 SSRF。
危险输入包括:
http://localhost:...
http://127.0.0.1:...
http://169.254.169.254/...
file:///etc/passwd
内网 IP 地址
Crawl4AI 近期 release 中也多次强调 Docker API、SSRF、file URL 和安全默认值问题。生产环境必须显式做 URL 校验。
8.4 敏感数据
不要把包含个人隐私、账号、订单、合同、医疗、财务等敏感信息的网页未经处理直接入库。
九、常见坑和排查
| 问题 | 可能原因 | 处理方式 |
|---|---|---|
| 安装后浏览器报错 | Playwright 浏览器没装好 | 运行 python -m playwright install --with-deps chromium |
| 输出为空 | 页面需要 JS 渲染或被拦截 | 检查浏览器模式、等待策略、反爬 |
| Markdown 很乱 | 页面结构复杂 | 调整抽取策略,先限定正文区域 |
| 表格丢失 | 原网页表格结构复杂 | 单独处理表格或保留 HTML 片段 |
| 被 Cloudflare 拦截 | 网站反爬 | 降低频率,遵守站点规则,不做违规绕过 |
| 知识库回答不准 | 抓取结果未清洗 | 先人工抽样检查 Markdown |
| Docker API 有安全风险 | URL 和 hooks 权限过大 | 关闭危险能力,启用鉴权和 URL 白名单 |
十、适合落地的 6 类场景
10.1 官网帮助中心入库
把产品帮助中心抓成 Markdown,导入客服知识库。
10.2 竞品资料监控
定期抓竞品官网、价格页、更新日志,再生成周报。
10.3 开发者文档问答
抓 API 文档、SDK 文档、Release Notes,做内部研发助手。
10.4 政策和公告整理
抓公开政策页面,转成结构化 Markdown,再由 AI 总结变化。
10.5 Agent 网页阅读工具
给 Agent 一个稳定的网页读取工具,而不是直接把原始 HTML 塞给模型。
10.6 RAG 数据预处理流水线
作为数据入库前的标准化步骤:
网页 -> Markdown -> 清洗 -> 切块 -> 检索 -> 回答
十一、最终评价
Crawl4AI 的价值不是“又一个爬虫库”,而是它把目标明确放在了 LLM、RAG、Agent 和数据管道上。
适合使用 Crawl4AI 的团队:
正在做 RAG;
需要把网页资料变成 Markdown;
需要批量整理公开文档;
希望减少 HTML 噪声;
需要给 Agent 提供网页读取能力;
已经有 MarkItDown 处理文件,现在还缺网页处理。
不太适合的情况:
只想抓一个固定字段;
要绕过强反爬或付费墙;
没有合规意识;
抓完不做清洗和质量评估;
把它直接暴露成公网 URL 抓取服务却不做安全限制。
我的建议:
第一步:先抓 3 个公开文档页,看 Markdown 质量;
第二步:把输出保存成文件,人工抽样检查;
第三步:加元数据、清理导航页脚;
第四步:导入 Dify 或 Open WebUI 知识库;
第五步:用真实问题测试命中率和回答质量;
第六步:再做批量抓取和定时更新。
做 RAG 时,数据质量通常比模型选择更先决定上限。Crawl4AI 正好补的是这块。
更多推荐
所有评论(0)