每天刷到那么多好内容,但真正能塞进 AI 的,少得可怜。
你有没有碰到这种情况:想让 Claude 或 GPT 帮你分析一篇文章,把链接扔进去,结果 AI 说"我没办法直接访问网页"。你去手动复制,粘贴过来全是乱七八糟的导航栏、广告、脚注,AI 读得一头雾水,给出的回答质量也大打折扣。
或者更进一步——你想搭一个 RAG 知识库,需要爬几百个页面,每一页都要清洗、提取、结构化,光是这个活儿就能把人逼疯。
今天要介绍的这个工具,专门解决这个问题:Crawl4AI,GitHub 已经超过 40k star,最近在 AI 开发者圈子里频繁被提起,被称为"专门为 LLM 设计的爬虫"。
这是什么?
Crawl4AI 是一个开源的 Python 网页爬取库,但它跟普通爬虫不一样——普通爬虫给你的是 HTML 汤,而 Crawl4AI 给你的是干净的 Markdown,直接可以喂给 AI。
这个项目由独立开发者 @unclecode[1] 发起,核心理念是:既然 LLM 最擅长处理自然语言文本,那就直接把网页转换成 LLM 最好消化的格式,省掉中间所有的数据清洗工作。
几个核心能力:
• HTML → Markdown:自动去掉导航栏、广告、侧边栏等噪音,只留正文内容 • 结构化提取:用 CSS 选择器或 XPath 提取特定字段,输出 JSON • LLM 提取:直接调 GPT/Claude 来理解页面结构,自动解析复杂表格和非标准排版 • 动态页面支持:底层用 Playwright,能处理 JavaScript 渲染、点击按钮、翻页 • 批量并发:同时爬几十个 URL,速度很快 • 自适应爬取:设定一个问题,让它自动判断要不要继续爬下一页
和同类工具比,比如 BeautifulSoup(只解析 HTML,不智能),或 Firecrawl(商业服务,要付费),Crawl4AI 完全开源免费,而且专门针对 AI 场景做了优化,不是通用爬虫加了个 Markdown 输出那么简单。
怎么用?(复制即用)
第一步:安装
pip install crawl4aicrawl4ai-setup # 安装浏览器依赖,必须运行这步如果安装后想确认环境没问题:
crawl4ai-doctor它会检查 Python 版本、Playwright 是否正常,碰到问题会给出修复建议。
第二步:最简单的使用——爬一个页面
import asynciofrom crawl4ai import AsyncWebCrawlerasync def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun("https://example.com") print(result.markdown[:500]) # 打印前500字符asyncio.run(main())运行之后,你会看到一段干净的 Markdown 文本,没有 HTML 标签,没有广告,只有正文内容。
第三步:喂给 AI 分析
有了 Markdown,直接拼进 prompt 就行:
import asynciofrom crawl4ai import AsyncWebCrawlerfrom openai import OpenAI # 或者换成 anthropicasync def analyze_page(url: str, question: str): # 抓页面 async with AsyncWebCrawler() as crawler: result = await crawler.arun(url) # 构造 prompt content = result.markdown[:8000] # 控制 token 数 prompt = f"""以下是网页内容:{content}问题:{question}""" # 调 AI client = OpenAI() response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}] ) return response.choices[0].message.content# 使用result = asyncio.run(analyze_page( "https://techcrunch.com/2026/06/01/some-article", "这篇文章的核心观点是什么?对我们有什么影响?"))print(result)第四步:批量爬多个 URL(并发)
import asynciofrom crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheModeasync def batch_crawl(urls: list): run_cfg = CrawlerRunConfig(cache_mode=CacheMode.BYPASS, stream=True) async with AsyncWebCrawler() as crawler: async for result in await crawler.arun_many(urls, config=run_cfg): if result.success: print(f"✅ {result.url} - {len(result.markdown)} chars") else: print(f"❌ {result.url} - {result.error_message}")urls = [ "https://news.ycombinator.com", "https://arxiv.org/abs/2301.00001", "https://docs.python.org/3/",]asyncio.run(batch_crawl(urls))进阶:用 CSS 提取结构化数据
不想要 Markdown,想要结构化 JSON?比如爬商品列表:
import asyncio, jsonfrom crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode, JsonCssExtractionStrategyschema = { "name": "商品列表", "baseSelector": "div.product-item", # 每个商品的容器 "fields": [ {"name": "title", "selector": "h2.product-title", "type": "text"}, {"name": "price", "selector": "span.price", "type": "text"}, {"name": "link", "selector": "a", "type": "attribute", "attribute": "href"} ]}async def extract_products(url: str): cfg = CrawlerRunConfig( cache_mode=CacheMode.BYPASS, extraction_strategy=JsonCssExtractionStrategy(schema) ) async with AsyncWebCrawler() as crawler: result = await crawler.arun(url, config=cfg) products = json.loads(result.extracted_content) return products# products = asyncio.run(extract_products("https://shop.example.com/list"))注意事项
1. 第一次运行慢:因为要启动 Chromium,冷启动需要几秒,正常的 2. 有些网站会反爬:可以加 BrowserConfig(headless=False)用有头模式,或者加代理3. token 消耗:如果你用 LLM 提取策略,每次爬都会消耗 token,大规模爬先用 CSS 提取 4. 异步是必须的:整个库基于 asyncio,不能在同步代码里直接调用,要用 asyncio.run()
为什么值得关注?
现在很多人在搭 RAG 知识库,或者给 AI Agent 配一个"能读网页"的工具,Crawl4AI 是目前这个场景下最省力的方案之一。
它不只是一个爬虫,更像是 AI 和互联网之间的翻译器——把乱糟糟的网页翻译成 AI 能顺畅阅读的文本。
随着 AI Agent 越来越普及,"给 AI 提供实时网络信息"这个需求会越来越刚,Crawl4AI 这个方向的工具会变得越来越重要。项目还在活跃维护,最近刚加了自适应爬取(AdaptiveCrawler)功能,让爬虫能像人一样判断"够了,不用再爬了"。
如果你在做:
• 私有知识库搭建 • AI 新闻摘要机器人 • 竞品监控自动化 • 给 AI Agent 配实时信息源
Crawl4AI 应该是第一个试的工具。
结尾
一句话总结:Crawl4AI 把"从网页到 AI 可用数据"这条路,从一天的工作量变成了十行代码。
建议你先用它爬几个自己常看的博客或文档站,感受一下清洗后的 Markdown 质量,再决定要不要接入你的项目。
项目地址:https://github.com/unclecode/crawl4ai
引用链接
[1] @unclecode: https://github.com/unclecode
夜雨聆风