🚀🤖 Crawl4AI:开源的外链图片转存中…(img-PtoLd5XX-1753976207289)]
Crawl4AI是最受欢迎的开源项目之一,它提供了高速且AI友好的网页爬虫能力,专为大型语言模型(LLMs)、AI代理和数据管道设计。它是完全开源的,灵活且具备实时性能,开发者可以以无与伦比的速度、精确度和部署简易性进行开发。
🎉 版本 0.7.0现已推出! 该版本引入了「自适应智能更新」,提供了突破性的功能:自适应爬虫能够学习网站模式、无限页面的虚拟滚动支持、具有三层评分的智能链接预览、异步URL播种器实现大范围发现以及显著的性能提升。
🧐 为什么选择Crawl4AI?
- 专为LLMs设计:生成智能、简明的Markdown,优化用于RAG和微调应用。
- 快速高效:提供6倍于传统爬虫的实时、成本效益高的性能。
- 灵活的浏览器控制:提供会话管理、代理和自定义钩子,确保无缝的数据访问。
- 启发式智能:采用先进算法进行高效提取,减少对昂贵模型的依赖。
- 开源与可部署性:完全开源,无需API密钥,准备好进行Docker和云集成。
- 蓬勃发展的社区:由活跃的社区维护,现为GitHub上排名第一的项目。
🚀 快速开始
- 安装Crawl4AI:
# 安装包
pip install -U crawl4ai
# 对于预发布版本
pip install crawl4ai --pre
# 运行安装后的设置
crawl4ai-setup
# 验证安装情况
crawl4ai-doctor
如果遇到与浏览器相关的问题,可以手动安装浏览器:
python -m playwright install --with-deps chromium
- 用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())
- 或使用新的命令行接口:
# 基本爬取,输出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驱动的提取:支持所有LLMs(开源和专有),进行结构化数据提取。
- 🧱 分块策略:实现基于主题、正则表达式和句子级别的分块处理。
- 🌌 余弦相似度:根据用户查询找到相关内容块,用于语义提取。
- 🔎 CSS基础提取:利用XPath和CSS选择器快速进行模式化数据提取。
- 🔧 模式定义:定义自定义模式,根据重复模式提取结构化的JSON。
🌐 浏览器集成
- 🖥️ 管理浏览器:使用用户拥有的浏览器,避免机器人检测。
- 🔄 远程浏览器控制:连接到Chrome开发者工具协议,实现远程、大规模的数据提取。
- 👤 浏览器配置器:创建和管理持久的配置文件,保存认证状态、cookie和设置。
- 🔒 会话管理:保存浏览器的状态,重复使用,实现多步骤爬取。
- 🧩 代理支持:无缝连接具备认证的代理,实现安全访问。
- ⚙️ 完整的浏览器控制:修改头部、cookie、用户代理等,实现定制化爬取设置。
- 🌍 多浏览器支持:兼容 Chromium、Firefox 和 WebKit。
- 📐 动态视口调整:自动调整浏览器视口以匹配页面内容,确保完整渲染和捕获所有元素。
🔎 爬取与抓取
- 🖼️ 媒体支持:提取图片、音频、视频及响应式图片格式,如
srcset
和picture
。 - 🚀 动态爬取:执行JS代码并等待异步或同步继续提取动态内容。
- 📸 截图:在爬取过程中捕获网页截图,用于调试或分析。
- 📂 原始数据爬取:直接处理原始HTML(
raw:
)或本地文件(file://
)。 - 🔗 全面链接提取:提取内部、外部链接及嵌入的iframe内容。
- 🛠️ 可自定义钩子:在每一步定义钩子,定制爬虫行为。
- 💾 缓存:缓存数据以提高速度并避免冗余抓取。
- 📄 元数据提取:从网页提取结构化元数据。
- 📡 iframe内容提取:无缝提取嵌入的iframe内容。
- 🕵️ 懒加载处理:等待图像完全加载,确保没有内容因懒加载而错过。
- 🔄 全页扫描:模拟滚动加载并捕获所有动态内容,适用于无限滚动页面。
🚀 部署
- 🐳 Docker化设置:优化的Docker镜像,配有FastAPI服务器,方便部署。
- 🔑 安全认证:内置JWT令牌认证,保障API安全。
- 🔄 API网关:一键部署,配合安全令牌认证,适用于API工作流。
- 🌐 可扩展架构:为大规模生产而设计,优化服务器性能。
- ☁️ 云部署:为主要云平台准备的即可部署配置。
🔬 高级用法示例
本项目提供了丰富的示例,帮助用户充分利用其能力。以下是一些流行的用法示例:
生成干净的Markdown
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
async def main():
browser_config = BrowserConfig(
headless=True,
verbose=True,
)
run_config = CrawlerRunConfig(
markdown_generator=DefaultMarkdownGenerator()
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://docs.example.com/",
config=run_config
)
print(result.markdown)
if __name__ == "__main__":
asyncio.run(main())
结构化数据提取
import asyncio
from crawl4ai import AsyncWebCrawler, JsonCssExtractionStrategy
async def main():
schema = {
"name": "Example Data",
"baseSelector": "div.data-section",
"fields": [
{
"name": "title",
"selector": "h1",
"type": "text",
},
{
"name": "description",
"selector": "p.description",
"type": "text",
},
]
}
extraction_strategy = JsonCssExtractionStrategy(schema)
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://www.example.com/data",
config=run_config
)
print(result.extracted_content)
if __name__ == "__main__":
asyncio.run(main())
使用自己的浏览器
import os, asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig
async def main():
user_data_dir = os.path.join("~", ".crawl4ai", "browser_profile")
os.makedirs(user_data_dir, exist_ok=True)
browser_config = BrowserConfig(
headless=True,
user_data_dir=user_data_dir,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://example.com/login",
config=run_config
)
print("成功爬取内容:", result.markdown)
if __name__ == "__main__":
asyncio.run(main())
✨ 最新更新
版本0.7.0发布亮点 - 自适应智能更新
- 🧠 自适应爬虫:新的爬虫系统能够自动学习和适应网站模式。
- 🌊 虚拟滚动支持:全面提取来自无限滚动页面的内容。
- 🔗 智能链接分析:采用三层评分机制,实现智能链接优先级。
- 🎣 异步URL播种器:在数秒内发现数千个URL。
完整细节请查看我们的0.7.0发布说明。
同类项目介绍
在开源领域,还有一些与Crawl4AI类似的项目,它们也致力于提供强大的数据抓取能力:
- Scrapy:一个开源网页抓取框架,支持深度爬取,扩展性强,具有良好的文档和社区支持。
- Beautiful Soup:主要用于解析HTML和XML文档,能够方便地进行数据提取。
- Playwright:支持自动化网页测试的框架,具有强大的交互功能,适合网页爬取和测试场景。
这些项目各有千秋,根据需求的不同可以选择适合的工具进行使用。