Crawl4AI 网页爬虫完整指南:从一键安装到 AI 提取
【免费下载链接】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 友好网页爬虫与抓取工具,能把 JS 渲染后的网页自动转成干净的 Markdown 和结构化数据,适合做 RAG、智能体和数据管道的新手与开发者。
什么是 Crawl4AI:它解决的问题
一句话定性:Crawl4AI 是一个面向大模型场景的异步网页爬虫,把"渲染页面 → 清洗 HTML → 输出结构化数据"这条链路打包成了一个 Python 库。
核心卖点:
- LLM 就绪的输出:自动产出带标题、表格、代码块的高质量 Markdown,可直接喂给模型
- 异步高性能:基于 Playwright 的浏览器池,
arun_many批量并发爬取 - 完整可控:会话、代理、Cookie、自定义 JS、钩子函数都开放配置
- 多种提取策略:CSS 选择器、正则、LLM 驱动的结构化提取按需切换
- 随处可部署:pip 直接装,也提供带 API 服务和监控面板的 Docker 镜像
快速上手:一键安装并跑通第一次网页爬取
安装只有三步,装完自带浏览器依赖的下载与体检:
pip install -U crawl4ai # 安装最新版本 crawl4ai-setup # 下载浏览器等依赖 crawl4ai-doctor # 自检安装是否完整想从源码跑,也可以git clone https://gitcode.com/GitHub_Trending/craw/crawl4ai后pip install -e .。
装好后,下面的脚本就是你的第一次爬取:无头浏览器访问页面,自动把 HTML 转成 Markdown。
import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun("https://example.com") print(result.markdown[:300]) # 输出前 300 个字符 asyncio.run(main())浏览器和运行行为分两层配置:BrowserConfig管浏览器(无头、用户代理、代理),CrawlerRunConfig管单次运行(缓存、提取策略、超时)。两层都是可选的,不传就用默认值。
核心能力
干净 Markdown 输出:AI 提取的第一步
默认每次爬取都会生成 Markdown,但导航栏、广告这类噪音还在。用PruningContentFilter按相关度阈值剪枝,DefaultMarkdownGenerator接收它即可;结果里fit_markdown是过滤后的正文,excluded_tags=["nav", "footer"]这类参数还能直接砍掉指定标签。对做 RAG 来说,这一步决定了上下文里的信噪比。
CSS 选择器精准提取:只要你要的那块
不想处理整页时,在CrawlerRunConfig里传css_selector=".article-content",结果就只剩选择器命中的区域,配合CacheMode.BYPASS保证拿到新内容,适合列表页里只抓正文的场景。
🧠 LLM 结构化提取:把网页变成 JSON
最有威力的功能:定义一个 Pydantic 模型,LLM 按 schema 从页面里抽字段,直接得到结构化数据,省去手写解析规则。
strategy = LLMExtractionStrategy( llm_config=LLMConfig(provider="openai/gpt-4o-mini", api_token=os.getenv("OPENAI_API_KEY")), schema=Product.schema(), # Product 是 Pydantic 模型 instruction="从页面中提取所有产品信息" ) config = CrawlerRunConfig(extraction_strategy=strategy)深度爬取策略:BFS / DFS / Best-First
crawl4ai/deep_crawling/模块提供三种策略:BFSDeepCrawlStrategy逐层铺开,适合发现整站内容;DFSDeepCrawlStrategy沿单条路径深入,适合垂直内容;Best-First 按 URL 评分优先爬相关性高的。三者都能限制max_depth和max_pages,控制成本和范围。
自适应爬取:用自然语言查询代替手写规则
AdaptiveCrawler配合AdaptiveConfig(如confidence_threshold=0.7、strategy="statistical")可以按查询智能探索站点:调用digest(start_url=..., query="产品价格信息"),它会边爬边评估哪些链接值得继续深入,直到内容饱和为止。适合"给我一个目标,你自己去找"这类研究型任务,示例见crawl4ai/adaptive_crawler.py和 docs/examples/adaptive_crawling/ 目录。
实战进阶:Docker 部署与批量任务监控
本地脚本之外,Crawl4AI 提供现成的 Docker API 服务,两条命令起一个带监控面板的爬虫服务:
docker pull unclecode/crawl4ai:latest docker run -d -p 11235:11235 --shm-size=1g --name crawl4ai unclecode/crawl4ai:latest起来后访问http://localhost:11235/dashboard就是监控面板,服务本体在 deploy/docker/ 目录,架构说明见 deploy/docker/ARCHITECTURE.md。
批量场景走arun_many(urls, config),默认由内存自适应调度器(dispatcher)控制并发节奏;配合CrawlerMonitor(crawl4ai/components/crawler_monitor.py)可以盯住每个任务的内存、峰值与耗时,长跑任务心里有数。
容易踩的坑
- 安装后浏览器启动报错→ 手动执行
python -m playwright install --with-deps chromium,再用crawl4ai-doctor复核。 - 被目标站识别为自动化访问→ 开启
simulate_user(模拟鼠标点击)、magic(自动处理弹层),并配置BrowserConfig里的代理;重度对抗场景参考 docs/md_v2/advanced/undetected-browser.md 的反检测浏览器方案。 - 动态加载内容抓不全(懒加载、无限滚动)→ 用
delay_before_return_html等页面稳定,用js_code注入window.scrollTo(...)触发滚动,配合wait_for条件等待关键元素出现;虚拟滚动的完整示例在docs/examples/virtual_scroll_example.py。 - 长跑任务内存吃紧→ 用
arun_many的 dispatcher 限制同时在跑的页面数,重复爬取的 URL 切到CacheMode.ENABLED走缓存,并关掉用不到的截图、媒体提取。
资源与下一步
- 官方文档快速开始:docs/md_v2/core/quickstart.md
- API 完整参考:docs/md_v2/api/
- 部署指南:deploy/docker/README.md
- 基础示例:docs/examples/quickstart.py
- LLM 提取示例:docs/examples/llm_extraction_openai_pricing.py
- 深度爬取模块:crawl4ai/deep_crawling/
建议路径:先跑通上面的最小示例,再换css_selector和 LLM 提取各试一次,最后把服务用 Docker 拉起来观察监控面板。Crawl4AI 的迭代很快,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),仅供参考