项目简介 Crawl4AI 是目前 GitHub 上星标最多的开源网络爬虫项目 (66.2k Stars),专为 AI 时代设计。它的核心理念是将网页内容转换为干净、结构化的 Markdown ,为 RAG(检索增强生成)、AI Agent 和数据管道提供高质量的数据源。
“Crawl4AI turns the web into clean, LLM ready Markdown for RAG, agents, and data pipelines.”
项目数据:
为什么选择 Crawl4AI 市面上爬虫工具不少,但 Crawl4AI 有几个让人眼前一亮的差异化优势:
1. 真正开源免费
不像很多”开源”爬虫需要付费账户和 API Token,Crawl4AI 从核心到部署完全开源,Apache 2.0 许可证可自由商用。
2. LLM 原生设计
不是把爬虫结果丢给 LLM 就完事,而是从底层为 LLM 消费优化:智能 Markdown 输出、语义分块、BM25 过滤、结构化提取,全链路打通。
3. 实际速度快
异步浏览器池 + 三层缓存架构(permanent/hot/cold)+ Prefetch 模式,预取速度比完整处理快 5-10 倍。
4. 反检测能力强
内置 Undetected 浏览器模式、3 层反机器人检测、代理自动升级、Shadow DOM 扁平化,能绕过 Cloudflare、Akamai 等主流防护。
核心功能一览 智能内容转换
功能
说明
Clean Markdown
生成干净、结构化的 Markdown,格式准确还原
Fit Markdown
基于启发式过滤,去除噪声和无关内容
BM25 过滤
基于 BM25 算法提取核心信息,去除冗余
引用与参考文献
将页面链接转换为带编号的引用列表
表格智能提取
智能分块处理大型表格
结构化数据提取
方式
适用场景
CSS/XPath 选择器
无需 LLM,快速模式提取,适合结构化页面
LLM 提取
自然语言定义 Schema,适合非结构化内容
Schema 定义
自定义 JSON Schema 从重复模式中提取
语义分块
基于主题/正则/句子级别的智能分块
浏览器控制 from crawl4ai import BrowserConfigconfig = BrowserConfig( headless=True , browser_type="chromium" , browser_type="undetected" , proxy_config=ProxyConfig(server="http://proxy:8080" ), user_data_dir="~/.crawl4ai/profile" , use_persistent_context=True , )
反爬与反检测(v0.8.5 新增)
3 层反机器人检测 :已知供应商 → 通用阻止指标 → 结构完整性检查
代理自动升级 :检测到封锁时自动切换代理链重试
Shadow DOM 扁平化 :提取隐藏在 Shadow DOM 中的内容
同意弹窗自动移除 :自动关闭 Cookie/隐私弹窗
智能深度爬取 自适应爬虫架构: URL 发现 → 3 层链接评分 → 策略选择 → 内容提取 ↑ ↓ Sitemap + Common Crawl 崩溃恢复 & 断点续爬 ( 秒级发现数千URL ) ( resume_state 回调)
3 种深度爬取策略 :BFS(广度优先)、DFS(深度优先)、Best-First(最佳优先)
异步 URL 发现器 :结合 sitemap 和 Common Crawl,秒级发现数千 URL
Prefetch 模式 :仅获取 HTML 和链接,5-10 倍加速
崩溃恢复 :深度爬取中断后可从断点恢复
快速上手 安装 pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor python -m playwright install --with-deps chromium
Docker 部署(推荐生产使用) docker pull unclecode/crawl4ai:latest docker run -d -p 11235:11235 --name crawl4ai --shm-size=1g unclecode/crawl4ai:latest
实战示例 1. 基础爬取 — 30 秒入门 import asynciofrom crawl4ai import AsyncWebCrawlerasync def main (): async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://www.nbcnews.com/business" ) print (result.markdown[:500 ]) asyncio.run(main())
就这么简单,3 行核心代码完成爬取。
2. CSS 选择器提取 — 无需 LLM 适合结构清晰的页面,速度快、零成本:
import asyncio, jsonfrom crawl4ai import AsyncWebCrawler, CrawlerRunConfigfrom crawl4ai import JsonCssExtractionStrategyschema = { "name" : "Products" , "baseSelector" : "div.product-item" , "fields" : [ {"name" : "title" , "selector" : "h3.name" , "type" : "text" }, {"name" : "price" , "selector" : "span.price" , "type" : "text" }, {"name" : "image" , "selector" : "img.thumb" , "type" : "attribute" , "attribute" : "src" } ] } run_config = CrawlerRunConfig( extraction_strategy=JsonCssExtractionStrategy(schema) ) async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://example.com/products" , config=run_config) products = json.loads(result.extracted_content)
3. LLM 智能提取 — 处理非结构化内容 import os, asynciofrom crawl4ai import AsyncWebCrawler, CrawlerRunConfig, LLMConfigfrom crawl4ai import LLMExtractionStrategyfrom pydantic import BaseModel, Fieldclass Product (BaseModel ): name: str = Field(..., description="产品名称" ) price: str = Field(..., description="产品价格" ) rating: str = Field(..., description="评分" ) run_config = CrawlerRunConfig( extraction_strategy=LLMExtractionStrategy( llm_config=LLMConfig(provider="openai/gpt-4o" , api_token=os.getenv('OPENAI_API_KEY' )), schema=Product.schema(), extraction_type="schema" , instruction="提取页面上所有产品的名称、价格和评分" ), ) async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://example.com/products" , config=run_config) print (result.extracted_content)
4. 执行 JS + 智能过滤 适合需要动态交互的页面:
import asynciofrom crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfigfrom crawl4ai.content_filter_strategy import BM25ContentFilterfrom crawl4ai.markdown_generation_strategy import DefaultMarkdownGeneratorrun_config = CrawlerRunConfig( js_code=[ """(async () => { // 点击所有标签页加载动态内容 document.querySelectorAll('.tab').forEach(tab => { tab.click(); }); })();""" ], markdown_generator=DefaultMarkdownGenerator( content_filter=BM25ContentFilter( user_query="AI 技术趋势" , bm25_threshold=1.0 ) ), cache_mode=CacheMode.BYPASS, ) async with AsyncWebCrawler(config=BrowserConfig(headless=True )) as crawler: result = await crawler.arun(url="https://example.com" , config=run_config) print (result.markdown.fit_markdown)
5. 命令行使用 crwl https://example.com -o markdown crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10 crwl https://example.com/products -q "Extract all product names and prices"
6. Docker API 调用 import requestsresponse = requests.post( "http://localhost:11235/crawl" , json={"urls" : ["https://example.com" ], "priority" : 10 } ) task_id = response.json()["task_id" ] result = requests.get(f"http://localhost:11235/task/{task_id} " ) print (result.json())
Docker 部署详解 Docker 部署是生产环境的推荐方式,内置 FastAPI 服务器、浏览器池、监控面板:
核心端点
端点
方法
说明
/crawl
POST
提交爬取任务
/task/{task_id}
GET
查询任务结果
/monitor/health
GET
系统健康状态
/monitor/browsers
GET
浏览器池状态
/dashboard
GET
监控仪表板(Web UI)
/playground
GET
交互式游乐场
安全配置 docker run -d -p 11235:11235 \ -e CRAWL4AI_API_TOKEN=your-secret-token \ unclecode/crawl4ai:latest docker run -d -p 11235:11235 \ -e CRAWL4AI_HOOKS_ENABLED=false \ unclecode/crawl4ai:latest
与其他爬虫工具对比
特性
Crawl4AI
Scrapy
Selenium
BeautifulSoup
语言
Python
Python
多语言
Python
异步支持
✅ 原生
✅
❌
❌
JS 执行
✅
❌
✅
❌
Markdown 输出
✅
❌
❌
❌
LLM 集成
✅ 内置
❌
❌
❌
反检测
✅ 内置
❌
部分
❌
Docker 部署
✅
✅
❌
❌
深度爬取
✅
✅
❌
❌
学习曲线
低
中
高
低
LLM 友好
✅ 专为 LLM 设计
❌
❌
❌
适用场景 1. RAG 数据采集 最核心的使用场景。将网页内容转为干净 Markdown,直接送入向量数据库:
result = await crawler.arun(url="https://docs.example.com" ) clean_markdown = result.markdown.fit_markdown
2. AI Agent 工具 为 AI Agent 提供网页数据获取能力,类似 MCP 集成:
result = await crawler.arun(url=user_provided_url) context = result.markdown.raw_markdown
3. 批量数据采集 利用深度爬取和并发能力,批量采集结构化数据:
results = await crawler.arun_many( urls=["https://site.com/page/1" , "https://site.com/page/2" , ...], config=run_config )
4. 竞品监控与舆情分析 定时爬取目标网站,监控内容变化:
crwl https://competitor.com/blog --deep-crawl bfs --max-pages 50 -o markdown
安全注意事项 Crawl4AI 近期修复了几个重要安全问题,使用时需要注意:
v0.8.6 紧急升级 :修复了 litellm 的 PyPI 供应链攻击,已替换为 unclecode-litellm
Docker RCE 修复 (v0.8.5):/crawl 端点存在反序列化漏洞,已修复
Redis CVE 修复 :已升级至 7.2.7 修复 CVE-2025-49844
Docker Hooks 默认禁用 :生产环境保持禁用状态
使用爬虫时请遵守目标网站的 robots.txt 和相关法律法规
总结 Crawl4AI 在 AI 时代的爬虫工具中确实有独特优势。它不是传统爬虫的简单改良,而是从设计之初就围绕 LLM 的需求来构建——干净的数据输出、智能的内容过滤、原生的结构化提取、内置的反检测能力。
推荐使用的场景:
RAG 系统的数据采集层
AI Agent 的网页数据获取工具
需要处理动态内容的复杂爬取任务
需要绕过反爬防护的实战场景
需要注意的地方:
主要依赖 Playwright,资源占用相对较高
LLM 提取功能需要额外 API 费用
深度爬取大规模站点时需注意合规性
项目迭代较快,API 可能存在 Breaking Changes
对于需要在 AI 工作流中集成网页数据获取的开发者来说,Crawl4AI 是目前最成熟的开源方案之一。
GitHub 仓库:https://github.com/unclecode/crawl4ai