Crawl4ai专为LLM而生的爬虫
做 AI 应用的人,迟早都会撞上同一个问题–喂给模型的数据从哪来?
模型自己不会上网。你要给它知识,就得先去网上抓内容、清洗、转成它能吃的格式。而网页抓取这件事,从来都不简单:动态加载、反爬、登录态、表格、分页、JS 渲染……每个都是坑。
有人专门为 LLM 场景做了一个爬虫,把抓取到的网页直接转成干净的 Markdown。这个项目叫 crawl4ai,是 GitHub 上 star 最多的爬虫,作者是 unclecode。
GitHub地址:https://github.com/unclecode/crawl4ai
它到底是什么?
crawl4ai 是一个开源的、对 LLM 友好的网页爬虫和抓取工具,专门把网页转成干净的 Markdown,喂给 RAG、agent 和数据管道。 它的官方定位写得很直白:
把网页变成干净、LLM 可用的 Markdown,服务 RAG、agent 和数据管道。快速、可控、被 5 万+ star 社区实战检验。
技术栈是 Python,Apache-2.0 协议,作者把它定位成“为可用性而开源”–任何人都能用,不设门槛。
为什么作者要做这个?
README 里有个挺有意思的小故事:2023 年他需要把网页转成 Markdown,找了个号称“开源”的方案,结果要注册账号、要 API token、还要 16 美元,最后还不好用。他“暴怒模式”启动,几天内做出了 crawl4ai,结果一炮走红。 所以他做这件事的初心很明确:抓网页这件事,不该被收费墙和 token 卡住。
为什么“LLM 友好”这么重要?
很多人以为爬虫就是“把 HTML 抓下来”,其实最难的是抓完之后。普通的 HTML 直接喂给模型,会有几个问题:
- 导航栏、广告、页脚全是噪音,浪费 token 还干扰理解
- 表格、代码块、标题层级乱掉,模型读不出结构
- 接丢失,没法做引用溯源
- 动态加载的内容抓不全
crawl4ai 针对这些逐个解决:
1)干净的 Markdown
抓下来不是原始 HTML,而是结构清晰的 Markdown–标题、表格、代码块都对齐,格式准确。
2)Fit Markdown(智能过滤)
用启发式规则(还有 BM25 算法)去掉噪音,只留正文核心内容。直接喂模型,省 token 又准。
3)引用与参考
把页面链接转成带编号的参考列表,输出里带干净的引用。做 RAG 时溯源特别有用。
4)自定义策略
你可以写自己的 Markdown 生成策略,针对特定网站做优化。
这一套下来,输出就是“模型能直接吃”的格式,不用你再写一堆清洗代码。
默认能做什么?
功能面非常广,按几大块说:
结构化数据抽取
- LLM 驱动抽取:支持所有 LLM(开源的、闭源的),从页面里抽结构化数据
- 分块策略:按主题、正则、句子级分块,做针对性处理
- 余弦相似度:按查询语义找相关内容块
- CSS/XPath 抽取:用选择器做快速 schema 抽取,定义自己的 schema 把重复结构转成 JSON
浏览器集成
- 托管浏览器:用你自己的浏览器,完全控制,绕过反爬 - 远程浏览器控制:接 Chrome DevTools Protocol,做大规模远程抓取 - 浏览器 Profiler:保存登录态、cookie、配置,复用 profile - Session 管理:保留浏览器状态,多步爬取复用 - 代理支持:带认证的代理无缝接入 - 多浏览器:Chromium、Firefox、WebKit 都支持 - 动态视口:自动调整视口匹配页面内容,确保全部渲染
抓取与抓取
- 媒体支持:图片、音频、视频、srcset、picture 都能抽
- 动态抓取:执行 JS、等待异步内容
- 截图:抓取时截屏,调试或分析用
- 原始数据:直接处理 raw HTML 或本地文件
- 链接抽取:内链、外链、iframe 内容都能拿
- 自定义 Hook:每一步都能挂钩子改行为
- 缓存:避免重复抓取,提速
- 懒加载处理:等图片加载完,不漏内容
- 整页扫描:模拟滚动,搞定无限滚动页面
深度爬取
支持 BFS 等策略做整站深度爬取,还能设最大页数。而且有个很实用的能力–崩溃恢复:长时间爬取崩了能从 resume_state 接着跑,不用从头再来。还有 prefetch 模式,URL 发现快 5-10 倍。
部署
- Docker 化:带 FastAPI server,部署方便
- 安全认证:内置 JWT token 认证
- 可扩展架构:为大规模生产设计
- 云部署:主流云平台都有现成配置
安装
| |
装完跑一个最简单的爬取:
| |
几行代码,拿到干净 Markdown。
命令行(v0.9 新增)
不想写代码,直接命令行:
| |
用 LLM 做结构化抽取
这是它最“AI 原生”的能力。定义一个 schema,让它从页面里抽你要的字段,直接出 JSON。不用写一堆正则和选择器,描述清楚你要什么,LLM 帮你抽。
适合谁用?
如果你满足下面任意一条,值得用:
- 做 RAG 应用,需要把网页变成干净的上下文
- 做 AI agent,需要实时抓取网页作为工具
- 做数据管道,需要大规模、可控的网页抓取
- 受够了现成爬虫的清洗和噪音问题
- 需要登录态、代理、反爬绕过的复杂场景
如果你只是偶尔抓一个静态页面,requests + BeautifulSoup 可能就够,用不上它的全部能力。但凡你进入“给 AI 喂网页数据”的场景,crawl4ai 这种“LLM 友好”的设计能省掉大量后处理工作。