做知识库、RAG 或 AI Agent 时,最烦的一步是什么?不是模型,是把网页内容弄干净。打开网页 → 复制正文 → 手动删导航、删广告、删无关推荐——遇到 JavaScript 动态渲染、无限滚动、登录态页面,这套流程直接失控。
Crawl4AI 就是冲着这个问题来的:用真实浏览器加载网页,清洗噪声,直接输出干净、结构化、适合大模型消费的数据——Markdown、JSON、链接、媒体、截图、元数据,一条龙。GitHub 上已经 75.7K Stars,Apache-2.0 协议,Python 写的,活跃度拉满。
它和普通爬虫有什么不一样
传统爬虫(requests + BeautifulSoup)拿到的是原始 HTML,动态页面经常抓不到 JS 渲染后的内容。Crawl4AI 的流程是三层:
- 浏览器真实渲染——动态页面、异步请求、登录会话都在真实浏览器环境里跑,懒加载和无限滚动的内容也能拿到
- 内容清洗——按标签、选择器、相关性阈值过滤掉导航、广告、弹窗这些噪声
- 结构化输出——给你 Markdown、JSON、原始 HTML、截图、内链外链、页面元数据,直接能喂给下游
核心能力
Markdown 生成:输出原始 Markdown 和 Fit Markdown(过滤后的精炼版),支持正文过滤、BM25 相关性过滤和引用列表。
结构化提取:用 CSS、XPath 或 LLM 把重复结构的页面(商品列表、文档目录)直接提取成 JSON。
浏览器控制:支持 JavaScript 执行、Cookie、会话、持久化浏览器档案、代理、截图,还能驱动多种浏览器。
整站抓取:内置 BFS、DFS、Best-First 多种深度抓取策略,带恢复点、取消和预取模式,抓大型文档站不慌。
自适应研究:AdaptiveCrawler 会围绕你的问题评估信息覆盖度,信息够了自动停止——不会为了一个问题把整个网站盲目抓完。
上手有多简单
普通用户三条命令就能跑起来:
pip install -U crawl4ai
crawl4ai-setup # 准备 Playwright 浏览器
crawl4ai-doctor # 检查环境
把网页抓成本地 Markdown,几行代码:
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/")
if not result.success:
raise RuntimeError(result.error_message)
Path("crawl4ai-docs.md").write_text(
result.markdown.raw_markdown, encoding="utf-8")
print("已生成 crawl4ai-docs.md")
asyncio.run(main())
不想写代码也行,CLI 直接来:crwl https://docs.crawl4ai.com -o markdown,加参数还能整站抓取、跑 LLM 提取。
Docker 自托管
要部署成服务,官方 Docker 镜像带浏览器池、监控面板、Playground、API 和 MCP 接入。注意 v0.9.0 之后安全默认值改了:API 默认开启认证,没设 Token 时只绑定本机地址,启动日志会打印一次性 Token。对外提供服务前先 export CRAWL4AI_API_TOKEN="$(openssl rand -hex 32)" 生成静态 Token 再启动。
使用边界
能抓到不等于可以随便抓。只抓公开可访问的内容、自己拥有的数据或已授权的页面,遵守网站服务条款和 robots 规则,别用浏览器控制、会话、代理去绕过登录、付费墙和访问限制。这是工具的基本伦理,也是它 README 里专门写的一节。
v0.9.2 是维护更新,主要修了流式任务资源泄漏、Docker Playground、WebSocket 和 GPU 构建问题,没有新功能也没有破坏性变更。一句话总结:先用 Crawl4AI 把网页变成干净可控的数据,再交给 RAG、Agent 和分析系统。
| 项目 | 信息 |
|---|---|
| Stars | 75.7K |
| 语言 | Python |
| 平台 | 跨平台 (CLI / Docker) |
| 协议 | Apache-2.0 |
GitHub 源码
官网



