写在前面: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
LicenseApache-2.0
最新 Releasev0.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,那可以这样理解:

数据来源推荐工具
PDFMarkItDown
WordMarkItDown
PPTMarkItDown
ExcelMarkItDown
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 正好补的是这块。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐