Crawl4AI:为 LLM 输出干净 Markdown 的开源网页爬虫
2026/9/9 15:19:33 网站建设 项目流程

Crawl4AI:为 LLM 输出干净 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

给 RAG 系统喂网页数据前,你得先把 HTML 变成 AI 能读的 Markdown。Crawl4AI 就是一个干这件事的开源网页爬虫:无头浏览器渲染完页面,你拿到的直接是干净的 Markdown。

Crawl4AI 是什么

传统爬虫把 HTML 交给你自己清洗,而 Crawl4AI 的定位是 AI 应用的"最后一公里"取数工具:底层用 Playwright 驱动真实浏览器完成 JS 渲染,输出格式直接面向大模型。你不用写正则、不用为每个站点维护选择器,声明好需求,框架负责剩下的事。它目前在 GitHub 上有 50k+ 星标,当前版本 v0.9.0,pip 包和 Docker 镜像都在持续更新。

🚀 快速上手:装完浏览器就能跑第一个爬虫

先在终端装包并初始化浏览器环境,crawl4ai-doctor会告诉你环境是否可用:

pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor

三条命令分别安装库、下载 Chromium、做体检。然后写一个最短的抓取脚本:

import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun("https://www.nbcnews.com/business") print(result.markdown[:500]) asyncio.run(main())

运行后无头浏览器打开页面、等待动态内容加载完成,result.markdown就是整页的 Markdown,标题层级、表格、链接都已整理好。

🔍 亮点拆解:从干净文本到结构化数据

LLM 友好的 Markdown 与自动去噪

输出不是 HTML 直译,而是带引用列表的结构化 Markdown。传CrawlerRunConfig(markdown_generator=DefaultMarkdownGenerator(content_filter=PruningContentFilter()))就能剪掉导航、页脚等噪音;也可以用BM25ContentFilter(user_query=...)按你的问题挑选相关段落。过滤后的版本在result.markdown.fit_markdown里。

不用 LLM 的结构化提取

页面结构稳定时,用JsonCssExtractionStrategy按 CSS 选择器直接抓 JSON,比调模型又快又省。选择器 schema 可以让 LLM 一次性生成:JsonCssExtractionStrategy.generate_schema(html, llm_config=...),之后每次提取都走 CSS,不再依赖模型。

LLM 提取:给一个问题,拿回结构化字段

结构未知、字段模糊的页面交给LLMExtractionStrategy:传入llm_config、一个 pydantic 模型的schema和一句instruction,爬完后result.extracted_content直接返回 JSON。官方示例从 OpenAI 定价页提取了每个模型的输入/输出单价,几十行代码就搞定。

深度爬取:BFS、DFS、Best-First

把策略对象挂到配置的deep_crawl_strategy参数上,爬虫就从入口页出发自动跟进站內链接,按max_depthmax_pages控制规模。v0.8.0 起还支持resume_state崩溃恢复,跑了几百页的任务断了可以从断点续爬。

🛠️ 深度用法:策略怎么选,服务怎么部署

三种深度爬取策略的取舍:

策略行为适用场景关键参数
BFS逐层向外扩展摸清站点全貌、建页面索引max_depthmax_pages
DFS沿一条路径深挖垂直站点的分类页递归max_depthfilter_chain
Best-First按评分挑下一个 URL目标导向、内容打分后择优爬取url_scorerscore_threshold

一个 BFS 深度爬取的最小脚本长这样:

from crawl4ai import AsyncWebCrawler, CrawlerRunConfig from crawl4ai.deep_crawling import BFSDeepCrawlStrategy config = CrawlerRunConfig( deep_crawl_strategy=BFSDeepCrawlStrategy(max_depth=2, max_pages=20) ) async with AsyncWebCrawler() as crawler: results = await crawler.arun("https://docs.crawl4ai.com", config=config) print(len(results), "pages crawled")

运行后它会以文档首页为起点按层展开,爬满 20 页为止,每个结果都是独立的CrawlResult

如果多个服务要共用爬虫,不必各自嵌 Python 库:跑官方镜像docker run -d -p 11235:11235 --shm-size=1g unclecode/crawl4ai:latest,启动后localhost:11235提供/crawl等 REST 接口,/dashboard面板能实时看浏览器池和内存占用。注意 v0.9.0 之后自托管服务默认开启认证并只绑定 loopback,升级前先看 deploy/docker/MIGRATION.md。

📦 落地建议

  • 目标站有反爬时,在BrowserConfig里同时上proxy_config=ProxyConfig(server=...)use_undetected_browser=True,遇到验证码就换代理节点重试,而不是硬刷。
  • 长任务跑在共享机器上时,压低AsyncWebCrawler(max_concurrent=...)并发,关掉不用的截图和媒体提取;深度爬取记得持久化resume_state,避免中途崩溃从头再来。

📚 资源导航

  • docs/md_v2/core/quickstart.md—— 从首次抓取到动态页面的完整起步文档
  • docs/examples/llm_extraction_openai_pricing.py—— LLM 提取的可运行示例
  • docs/examples/docker_example.py—— Docker API 调用示例
  • deploy/docker/README.md—— 镜像部署、监控面板与生产配置

如果手头正好有一批等着喂给模型的网页,先把上面 11 行脚本里的 URL 换成你的目标页,跑通之后再考虑加策略。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询