Crawl4AI 爬虫使用指南:5 行代码把网页转成 AI 可用的 Markdown
【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai
Crawl4AI 是一个开源的 LLM 友好型网页爬虫:它驱动真实浏览器访问网页,把 HTML 直接转换为干净的 Markdown 和结构化 JSON,解决原始 HTML 噪音多、动态内容抓不全、直接喂给 AI 效果差的问题。
项目概览
一句话定位:面向 AI 数据管道的网页抓取工具,输入 URL,输出可直接用于 RAG 的 Markdown、结构化数据和监控接口。
| 维度 | 说明 | 相比传统方案的改进 |
|---|---|---|
| 核心能力 | 浏览器渲染、Markdown 生成、CSS/LLM 双通道提取、深度爬取、自适应爬取 | 传统 requests 类工具拿不到 JS 渲染后的内容,需手写解析 |
| 适用场景 | RAG 知识库构建、AI Agent 数据源、电商与资讯结构化采集、生产级抓取服务 | Selenium 方案需维护大量等待与选择器代码,配置成本高 |
| 目标用户 | AI 工程师、数据工程师、需要批量网页数据的开发者 | 无需同时精通 Playwright、解析器和反爬对抗 |
| 部署方式 | pip 本地库、Docker API 服务(11235 端口)、监控面板 | 传统脚本难以水平扩展,Docker 版提供连接池与任务队列 |
快速上手:Crawl4AI 安装与首次爬取
Python 环境安装分三步,crawl4ai-doctor会在结束时自检依赖是否齐全:
pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor最小爬取示例,运行后终端直接打印页面转换出的 Markdown 前 500 字符:
import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://example.com") print(result.markdown.raw_markdown[:500]) asyncio.run(main())不写本地代码、直接起服务时,用 Docker 部署 Crawl4AI 的完整流程是两条命令:
docker pull unclecode/crawl4ai:latest docker run -d -p 11235:11235 --name crawl4ai --shm-size=1g unclecode/crawl4ai:latest启动后访问localhost:11235/dashboard看运行状态,/playground可在线调试单次爬取请求,API 参数与 Python SDK 的CrawlerRunConfig一一对应。
场景实操:网页数据获取的三种做法
为 RAG 管道准备干净 Markdown。新闻和百科页面普遍携带导航栏、页脚、广告位,直接入库会稀释检索质量。关键配置是excluded_tags加剪枝过滤器:PruningContentFilter(threshold=0.48, threshold_type="fixed")按节点信息密度裁掉低价值区块,options={"ignore_links": True}去掉链接锚文本。预期效果是result.markdown.fit_markdown的长度显著小于raw_markdown,留下的正文密度更高。
config = CrawlerRunConfig( cache_mode=CacheMode.BYPASS, excluded_tags=["nav", "footer", "aside", "header"], markdown_generator=DefaultMarkdownGenerator( content_filter=PruningContentFilter(threshold=0.48, threshold_type="fixed"), options={"ignore_links": True}, ), )CSS 选择器截取列表区。当只需要页面某个区域(如搜索结果列表、文章正文容器)时,给CrawlerRunConfig传css_selector="article .content",Markdown 只由该选择器命中的节点生成;配合exclude_external_links=True可过滤外链,避免列表页混入第三方站点的链接数据。
LLM 驱动的结构化数据提取。页面结构不固定、写选择器维护成本高时,用 Pydantic 模型定义字段,交给LLMExtractionStrategy按 schema 抽取。llm_config指定供应商(如openai/gpt-4o-mini),schema传Product.model_json_schema(),instruction说明抽取范围;结果在result.extracted_content中以 JSON 数组返回,每条记录与模型字段一一对应。
深度功能:深度爬取、缓存与反检测的设计点
深度爬取:三种策略 + 过滤与评分。入口是deep_crawling模块,BFSDeepCrawlStrategy(max_depth=3, max_pages=50, include_external=False)逐层扩展链接,DFSDeepCrawlStrategy沿单条路径深入,BestFirstCrawlingStrategy按评分器打分排序后优先抓取高分 URL。FilterChain可叠加DomainFilter、URLPatternFilter、ContentTypeFilter拦截无关链接,KeywordRelevanceScorer等评分器配合score_threshold做准入控制。适合站点地图探索和目标导向的内容发现。
缓存模式与词数阈值。cache_mode有ENABLED、BYPASS、WRITE_ONLY、READ_ONLY、DISABLED五档;开启读取时,引擎用word_count_threshold比较页面词数,内容未变化则直接返回缓存副本,省去浏览器启动开销。调试期建议BYPASS,稳定运行后再切回ENABLED换取速度。
反检测与代理轮换。magic=True开启一键反检测组合,simulate_user=True注入模拟人类行为的脚本,user_agent_mode="random"生成随机指纹 UA;proxy_config传server/username/password接入代理,RoundRobinProxyStrategy支持多代理轮询。目标站点有 Cloudflare 类拦截时,再叠加BrowserConfig(use_undetected_browser=True)使用打补丁的浏览器内核。
自适应爬取。AdaptiveCrawler接收自然语言查询,按AdaptiveConfig(confidence_threshold=0.7, max_depth=5, max_pages=20, strategy="statistical")自主决定下一步访问哪个链接,strategy可选statistical、embedding、llm三档,置信度低于阈值即停止,避免盲目爬全站。
避坑与经验
现象:首次运行报浏览器可执行文件缺失。原因:pip 只装 Python 包,Playwright 的浏览器二进制需单独下载。对策:执行
python -m playwright install --with-deps chromium,--with-deps顺带装系统库,Ubuntu 下可省去手工补依赖。现象:第二次爬取返回旧内容,页面明明已更新。原因:缓存读取命中,默认词数校验认为内容未变。对策:调试阶段设
CacheMode.BYPASS;需要强一致时改用DISABLED。现象:动态页面抓到的内容比肉眼看到的少。原因:HTML 在 JS 渲染完成前就被取走。对策:
delay_before_return_html增加等待,wait_for指定选择器就绪条件,"加载更多"型列表用js_code模拟点击,无限滚动页启用 virtual scroll 配置。现象:高并发下内存快速上涨、浏览器崩溃。原因:每个并发页面占用一个 Chromium 上下文。对策:下调
AsyncWebCrawler(max_concurrent=5),关闭screenshot和媒体提取,用CrawlerMonitor观察内存曲线再逐步加压。现象:LLM 提取返回空数组或字段缺失。原因:
instruction描述模糊,或页面正文低于word_count_threshold导致内容被过滤。对策:细化Field的 description 明确字段来源,必要时调低word_count_threshold。
延伸与资源
- 官方文档:docs/md_v2/core/quickstart.md(快速开始)、docs/md_v2/api/arun.md(arun 参数参考)
- 示例代码:docs/examples/quickstart.py(综合示例)、docs/examples/llm_extraction_openai_pricing.py(LLM 提取)
- 模块源码:crawl4ai/deep_crawling/(深度爬取策略)、crawl4ai/adaptive_crawler.py(自适应爬取)
- Docker 部署:deploy/docker/README.md(API 端点、JWT 认证、MCP 接入)
- 社区入口:项目描述中的 Discord 频道(discord.gg/jP8KfhDhyN)
以上为 Crawl4AI 0.9.0 的主线能力,版本迭代较快,具体参数以仓库内 CHANGELOG.md 为准。
【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考