🚀 Crawl4AI 是 GitHub 上排名第一的趋势项目,由活跃的社区持续维护。它为 LLM、AI Agent 和数据管道提供极速、AI 就绪的网页爬取能力。Crawl4AI 开源、灵活且专为实时性能构建,能够以无与伦比的速度、精准度和易用性赋能开发者。
🎉 版本 0.5.0 发布! 这次重要更新引入了深度爬取(支持 BFS/DFS/BestFirst 策略)、内存自适应调度器、多种爬取策略(Playwright 和 HTTP)、基于 FastAPI 的 Docker 部署、命令行工具(CLI)等!阅读发布说明 →
🤓 我的故事
我对计算机的热爱始于童年,那时我的父亲(计算机科学家)向我介绍了 Amstrad 计算机。这段经历点燃了我对技术的热情,促使我在研究生阶段攻读计算机科学并专攻 NLP。也是在那段时间,我首次接触了网页爬取,构建工具帮助研究人员整理论文并提取出版物中的信息。这段经历虽然充满挑战,但让我在数据提取方面积累了丰富经验。 时间来到 2023 年,我在做项目时需要将网页转换为 Markdown 格式。在寻找爬虫工具时,我发现了一款号称开源的解决方案,但实际上却需要注册账号并生成 API Token。而更糟糕的是,这竟然是一个收费的 SaaS 模型,每月收费 16 美元,且质量并不理想。这让我感到非常失望,甚至愤怒,于是决定自己开发一款爬取工具。仅用了几天时间,我便创建了 Crawl4AI。让我惊讶的是,它迅速在 GitHub 上走红,收获了数千颗星标,并吸引了全球开发者的关注。 我将 Crawl4AI 开源有两个原因: 1. 回馈开源社区——在我的职业生涯中,开源社区一直给我很多帮助。 2. 我坚信数据应对所有人开放,而不是被少数几家机构垄断或隐藏在付费墙后。开放数据有助于 AI 民主化,赋予个人训练自己模型的能力。这款库只是迈向更大目标的第一步:打造全球最强大的开源数据提取和生成工具,与热情的社区成员共同构建。 感谢所有支持这个项目的人!你的反馈和鼓励让我充满动力,继续追逐更大的梦想。欢迎加入我们,提交 Issue、贡献 PR,或帮助传播这个项目!让我们一起打造真正赋能每个人的数据访问工具,重塑 AI 的未来!🧐 为什么选择 Crawl4AI?
- 专为 LLM 构建:生成适合 RAG 和微调应用的简洁 Markdown。
- 极速性能:爬取速度提升 6 倍,实时高效且成本低。
- 灵活的浏览器控制:支持会话管理、代理和自定义 Hook,无缝访问数据。
- 启发式智能:采用高级算法高效提取数据,减少对昂贵模型的依赖。
- 开源且易部署:无需 API Key,支持 Docker 和云端集成。
- 活跃社区:由全球开发者社区维护,成为 GitHub 上排名第一的热门项目。
🚀 快速开始
安装预发布版本
pip install crawl4ai —pre
运行安装后的配置
crawl4ai-setup
验证安装情况
crawl4ai-doctor
如果遇到浏览器相关问题,可以手动安装:
```bash
python -m playwright install --with-deps chromium
- 使用 Python 运行简单的爬取任务: ```python import asyncio from crawl4ai import *
async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun( url=”https://www.nbcnews.com/business“, ) print(result.markdown)
if name == “main“: asyncio.run(main())
3. 或使用命令行:
```bash
# 基本爬取,输出 Markdown
crwl https://www.nbcnews.com/business -o markdown
# 深度爬取,使用 BFS 策略,最多爬取 10 页
crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10
# 使用 LLM 提取指定问题的数据
crwl https://www.example.com/products -q "提取所有产品价格"
✨ 功能亮点
📝 Markdown 生成
- 🧹 纯净 Markdown:生成结构清晰、格式精准的 Markdown。- 🎯 精简 Markdown:基于启发式过滤噪音,生成适合 AI 处理的数据。
- 🔗 引用与参考:将页面链接转换为编号引用列表。
- 🛠️ 自定义策略:支持自定义 Markdown 生成策略。
- 📚 BM25 算法:采用 BM25 筛选核心信息,去除无关内容。
📊 结构化数据提取
- 🤖 LLM 驱动提取:支持所有 LLM(开源和商用)进行结构化数据提取。- 🧱 分块策略:支持按主题、正则或句子级别分块,精确处理内容。
- 🌌 余弦相似度:基于查询提取语义相关内容。
- 🔎 基于 CSS 的提取:通过 XPath 和 CSS 选择器提取结构化数据。
- 🔧 自定义 Schema:可自定义数据提取 Schema,将网页数据转换为 JSON。
🌐 浏览器集成
- 🖥️ 自有浏览器管理:使用本地浏览器,避免被检测为爬虫。- 🔄 远程浏览器控制:连接 Chrome DevTools Protocol,远程大规模爬取数据。
- 👤 浏览器配置文件:管理持久化配置,包括身份验证状态和 Cookies。
- 🔒 会话管理:复用会话,支持多步爬取。
- 🧩 代理支持:连接带认证的代理,确保安全访问。
- 🌍 多浏览器支持:兼容 Chromium、Firefox 和 WebKit。
🔎 爬取与抓取
- 🖼️ 媒体提取:支持图片、音频、视频等资源的爬取。- 🚀 动态爬取:执行 JS 并等待异步内容加载。
- 📸 截图功能:在爬取过程中截屏,便于调试和分析。
- 🔗 链接提取:提取内外部链接及 iframe 内容。
🔬 高级用法示例
📚 使用 LLM 提取结构化数据
python
import os
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, LLMConfig
from crawl4ai.extraction_strategy import LLMExtractionStrategy
async def main():
browser_config = BrowserConfig(verbose=True)
run_config = CrawlerRunConfig(
extraction_strategy=LLMExtractionStrategy(
llm_config=LLMConfig(provider="openai/gpt-4o", api_token=os.getenv('OPENAI_API_KEY')),
instruction="提取所有产品价格。",
)
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://www.example.com/products",
config=run_config
)
print(result.extracted_content)
if __name__ == "__main__":
asyncio.run(main())