84,268 颗星、v0.9.4 刚发:为什么 AI 数据工程师都在把 Crawl4AI 写进 RAG 管线
凌晨两点,爬虫跑了一整晚,你把 CSV 发给业务同事,对方回了一句:”标题和价格字段怎么全是空的?”
回看日志,HTTP 状态码 200,一切正常。问题出在那个网站用 JavaScript 异步加载正文,requests 只抓到了空壳 HTML。
这个场景有多常见,做过数据采集的工程师都知道。Crawl4AI(GitHub:unclecode/crawl4ai,84,268 ⭐,Apache-2.0 许可)正是为解决这类问题而生的开源爬虫——内置无头浏览器渲染动态页面,直接把网页转成能喂给 RAG 的干净 Markdown,5 行代码出结果。
9 月 23 日刚发了 v0.9.4,这已经是它连续两周发布新版本。这个 8.4 万星的项目现在走到哪一步了,值不值得在生产环境里押注?
它解决的核心问题:把”拿 HTML”变成”拿 Markdown”
传统爬虫链路是:requests 拉 HTML → 正则或 XPath 挑字段 → 手动清洗广告和导航。页面一改版解析脚本就跟着崩,动态加载的正文更是抓不到。
Crawl4AI 把”渲染、净化、转 Markdown、提取”四步压进一次 arun() 调用,输出默认带标题层级、表格和链接,没有任何广告噪声。拿 RAG 场景来说,你要做一个能回答”某站最新公告”的问答应用,用 Crawl4AI 抓回来直接就是 Markdown,切块、向量化、入库,大模型检索到的内容质量明显更高。
更关键的是,它内置了 LLM 驱动的结构化提取。只需定义一个 Pydantic Schema,告诉它你要什么字段,它直接返回 JSON,不需要为每个网站写解析规则:
from pydantic import BaseModel, Field
from typing import List, Optional
class JobListing(BaseModel):
title: str = Field(description="Job title")
company: str = Field(description="Company name")
salary_range: Optional[str] = None
requirements: List[str] = Field(description="Key requirements")
result = await crawler.arun(
url="https://jobs.example.com",
extraction_strategy=LLMExtractionStrategy(
provider="openai/gpt-4o",
api_token="your-key",
schema=JobListing.model_json_schema(),
instruction="Extract all job listings"
)
)
# result.extracted_content 是结构化 JSON
最新版本动态:v0.9.4 刚发,v0.9.3 还热着
- v0.9.4(2026-09-23):最新稳定版,PDF 处理路径安全修复(5 个协调披露的漏洞,含任意文件写入、SSRF、DoS)+ 33 个 bug 修复,无新功能,不破坏兼容性
- v0.9.3(2026-08-31):同上安全热修复系列,关闭 PDF 处理路径的任意文件写入、SSRF 和 DoS 漏洞,以及 Docker Playground 的两个 XSS 问题
- v0.9.2(2026-07-15):修复 MemoryAdaptiveDispatcher 流式爬取内存泄漏、Docker Playground 监控 WebSocket 认证、GPU Docker 构建
过去三个月是 Crawl4AI 的安全密集修复期。从 v0.8.7 到 v0.9.0,官方一口气修了 9 个安全公告,其中多个 Critical 级别涉及 Docker API 的 RCE 和 SSRF。如果你跑的是自托管 Docker 版本,务必确保已在 0.9.0 以上——那一版把认证默认开启、服务器默认绑定回环地址,请求体从”信任边界”变成了”不信任边界”。
竞品对比:谁该用,谁该等
Crawl4AI 不是这个赛道的唯一玩家,以下是它与主流方案的差异:
| 特性 | Crawl4AI | Firecrawl | Scrapy | Crawlee |
|---|---|---|---|---|
| 开源方式 | 完全开源(Apache-2.0) | 部分开源(AGPL 云端) | 完全开源(BSD-3) | 完全开源(Apache-2.0) |
| JS 渲染 | ✅ Playwright | ✅ Playwright | ❌ 需 Splash | ✅ Playwright/Puppeteer |
| Markdown 输出 | ✅ 原生 | ✅ | ❌ | ❌ |
| LLM 结构化提取 | ✅ 内置 | ✅ | ❌ | ❌ |
| MCP 支持 | ✅ | ❌ | ❌ | ❌ |
| 自托管成本 | 免费(你的服务器) | 免费额度后付费 | 免费 | 免费 |
选 Crawl4AI 的理由:你要做 RAG/AI Agent 数据管线,预算敏感,要完全掌控基础设施,不想被云端 API 的调用量计费卡住。
不选 Crawl4AI、选 Scrapy 的理由:你要跑百万级页面长期运营的爬虫工程,需要精细的调度中间件和分布式能力。Scrapy 的工程能力仍是 Crawl4AI 短期内追不上的。
使用门槛与适合人群
真实门槛:
- 需要 LLM API Key 才能做结构化提取。Markdown 输出不需要,但如果要用 LLM 驱动的 Schema 提取(这是核心卖点),就得准备 OpenAI/Groq/本地模型的 Key
- 内存占用不低。并发跑多个页面时,无头浏览器吃内存明显,官方文档建议 4GB+ RAM
- Docker 部署有安全学习成本。v0.9.0 后默认安全加固了,但迁移旧有自托管部署需要看官方迁移指南
- Cloudflare 等反爬仍未 100% 绕过。v0.8.5 引入了 proxy escalation 链路,但对高强度反爬网站仍可能失败
适合谁:
- Python 数据工程师,正在搭 RAG 数据管线
- AI 应用开发者,需要给 Agent 提供实时网页数据
- 独立开发者或小团队,要快速抓取特定信息源
不适合谁:
- 需要日均百万级页面的规模化爬虫团队(Scrapy 生态更成熟)
- 完全不想碰任何 LLM API 的团队(考虑 Jina Reader)
- 对延迟极敏感的实时数据采集场景
可执行的下一步
想快速试一把(30 分钟出结果):
# 1. 安装
pip install -U crawl4ai
crawl4ai-setup # 一次性安装浏览器
# 2. 写一个最简脚本
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://news.ycombinator.com")
print(result.markdown[:500]) # 直接拿到干净文本
asyncio.run(main())
想用 Docker 跑完整服务(包含 MCP、监控面板、API):
docker pull unclecode/crawl4ai:latest
docker run -d -p 11235:11235
-e CRAWL4AI_API_TOKEN=your_secure_token
unclecode/crawl4ai:latest
然后把 MCP 接进你的 Agent:
claude mcp add --transport http crawl4ai http://localhost:11235/mcp
--header "Authorization: Bearer your_secure_token"
已经在用 v0.8.x 的 Docker 用户:立刻检查版本,如果是 0.9.0 之前的旧版本,先看迁移指南,再升级。
Crawl4AI 真正有价值的地方,是它把”给 AI 准备干净数据”这件事,从一个需要工程团队维护的脏活,变成了一个可以快速接入的工作流组件。84,268 颗星背后,是大量 RAG 和 AI Agent 开发者用脚投票——他们需要的就是这个定位。如果你的工作流里也有”抓网页 → 喂 AI”这一段,Crawl4AI 值得花半小时跑通第一个 demo。
仓库:https://github.com/unclecode/crawl4ai
文档:https://docs.crawl4ai.com
官方博客(含完整版本日志):https://docs.crawl4ai.com/blog
评论区
登录后可评论。