Home
Login

专为LLM和AI代理优化的开源高性能网页爬虫和数据提取工具

Apache-2.0Python 46.0kunclecode Last Updated: 2025-06-18

Crawl4AI - 专为LLM优化的开源智能网页爬虫

项目概述

Crawl4AI是一个专为LLM、AI代理和数据管道量身定制的高速、AI就绪网页爬虫。项目完全开源、灵活且专为实时性能而构建,为开发者提供无与伦比的速度、精度和部署便利性。

核心特性

🤖 专为LLM构建

  • 生成针对RAG和微调应用优化的智能、简洁Markdown
  • 提供清洁的结构化内容,适合AI模型处理
  • 支持所有LLM(开源和专有)进行结构化数据提取

⚡ 闪电般速度

  • 提供6倍更快的结果,具有实时、成本效益的性能
  • 基于异步架构,支持大规模并发处理
  • 内存自适应调度器,可根据系统内存动态调整并发性

🌐 灵活的浏览器控制

  • 会话管理、代理支持和自定义钩子
  • 支持用户自有浏览器,完全控制,避免机器人检测
  • 浏览器配置文件管理,保存认证状态、cookies和设置
  • 支持Chromium、Firefox和WebKit多浏览器

🧠 启发式智能

  • 使用先进算法进行高效提取,减少对昂贵模型的依赖
  • BM25算法过滤,提取核心信息并移除无关内容
  • 智能内容清理和降噪处理

主要功能模块

📝 Markdown生成

  • 清洁Markdown: 生成格式准确的结构化Markdown
  • 适配Markdown: 基于启发式过滤,移除噪音和无关部分
  • 引用和参考: 将页面链接转换为带有清洁引用的编号参考列表
  • 自定义策略: 用户可创建针对特定需求的Markdown生成策略

📊 结构化数据提取

  • LLM驱动提取: 支持所有LLM进行结构化数据提取
  • 分块策略: 实现分块(基于主题、正则表达式、句子级别)进行目标内容处理
  • 余弦相似度: 基于用户查询找到相关内容块进行语义提取
  • CSS选择器提取: 使用XPath和CSS选择器进行快速模式提取
  • 模式定义: 定义自定义模式从重复模式中提取结构化JSON

🔎 爬虫和抓取功能

  • 媒体支持: 提取图片、音频、视频和响应式图像格式
  • 动态爬虫: 执行JavaScript并等待异步/同步动态内容提取
  • 截图功能: 在爬虫过程中捕获页面截图用于调试或分析
  • 原始数据爬虫: 直接处理原始HTML或本地文件
  • 全面链接提取: 提取内部、外部链接和嵌入的iframe内容
  • 可自定义钩子: 在每个步骤定义钩子以自定义爬虫行为
  • 缓存机制: 缓存数据以提高速度并避免重复获取
  • 懒加载处理: 等待图片完全加载,确保不会因懒加载而遗漏内容

🚀 部署和集成

  • Docker化设置: 优化的Docker镜像,带有FastAPI服务器,便于部署
  • 安全认证: 内置JWT令牌认证,确保API安全
  • API网关: 一键部署,带有安全令牌认证的API工作流
  • 可扩展架构: 专为大规模生产设计,优化服务器性能
  • 云部署: 为主要云平台提供即用的部署配置

安装方式

Python包安装


pip install -U crawl4ai


crawl4ai-setup


crawl4ai-doctor

Docker部署


docker pull unclecode/crawl4ai:0.6.0-rN
docker run -d -p 11235:11235 --name crawl4ai --shm-size=1g unclecode/crawl4ai:0.6.0-rN

# webUI:http://localhost:11235/playground

基本使用示例

简单网页爬取

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())

命令行界面


crwl https://www.nbcnews.com/business -o markdown


crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10


crwl https://www.example.com/products -q "Extract all product prices"

LLM结构化数据提取

import os
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode, LLMConfig
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from pydantic import BaseModel, Field

class OpenAIModelFee(BaseModel):
    model_name: str = Field(..., description="Name of the OpenAI model.")
    input_fee: str = Field(..., description="Fee for input token for the OpenAI model.")
    output_fee: str = Field(..., description="Fee for output token for the OpenAI model.")

async def main():
    browser_config = BrowserConfig(verbose=True)
    run_config = CrawlerRunConfig(
        word_count_threshold=1,
        extraction_strategy=LLMExtractionStrategy(
            llm_config = LLMConfig(provider="openai/gpt-4o", api_token=os.getenv('OPENAI_API_KEY')),
            schema=OpenAIModelFee.schema(),
                      extraction_type="schema",
            instruction="""From the crawled content, extract all mentioned model names along with their fees for input and output tokens. 
            Do not miss any models in the entire content. One extracted model JSON format should look like this: 
            {"model_name": "GPT-4", "input_fee": "US$10.00 / 1M tokens", "output_fee": "US$30.00 / 1M tokens"}."""
        ),            
        cache_mode=CacheMode.BYPASS,
    )
    
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url='https://openai.com/api/pricing/',
            config=run_config
        )
        print(result.extracted_content)

if __name__ == "__main__":
    asyncio.run(main())

最新版本特性 (v0.6.0)

🌍 世界感知爬取

设置地理位置、语言和时区,获取真实的地区特定内容:

run_config = CrawlerRunConfig(
    url="https://browserleaks.com/geo",
    locale="en-US",
    timezone_id="America/Los_Angeles",
    geolocation=GeolocationConfig(
        latitude=34.0522,
        longitude=-118.2437,
        accuracy=10.0,
    )
)

📊 表格到DataFrame提取

直接将HTML表格提取为CSV或pandas DataFrame:


results = await crawler.arun(
    url="https://coinmarketcap.com/?page=1",
    config=crawl_config
)


raw_df = pd.DataFrame()
for result in results:
    if result.success and result.media["tables"]:
        raw_df = pd.DataFrame(
            result.media["tables"][0]["rows"],
            columns=result.media["tables"][0]["headers"],
        )
        break

🚀 浏览器池化

页面启动时使用预热的浏览器实例,降低延迟和内存使用

🔌 MCP集成

通过模型上下文协议连接到AI工具,如Claude Code:


claude mcp add --transport sse c4ai-sse http://localhost:11235/mcp/sse

技术架构

核心组件

  • 异步爬虫引擎: 基于Playwright的高性能异步架构
  • 内容过滤策略: 多种过滤算法,包括修剪过滤器和BM25过滤器
  • 提取策略: 支持CSS选择器、LLM和自定义提取策略
  • Markdown生成器: 智能内容转换为AI友好的Markdown格式
  • 浏览器管理: 完整的浏览器生命周期管理和会话控制

支持的提取方法

  1. CSS选择器提取: 快速、精确的结构化数据提取
  2. LLM提取: 使用大语言模型进行智能内容理解
  3. JavaScript执行: 动态内容处理和交互
  4. 正则表达式: 模式匹配和文本处理
  5. XPath选择器: 高级DOM元素定位

性能优势

  • 6倍速度提升: 相比传统爬虫工具
  • 内存优化: 智能内存管理和垃圾回收
  • 并发处理: 支持数千个URL的并发爬取
  • 缓存机制: 智能缓存减少重复请求
  • 资源管控: 自适应资源分配和限制

应用场景

数据科学和研究

  • 学术论文和研究数据收集
  • 市场研究和竞争分析
  • 社交媒体数据挖掘

AI和机器学习

  • 训练数据收集和预处理
  • RAG系统内容获取
  • 知识图谱构建

商业智能

  • 价格监控和比较
  • 新闻和舆情监测
  • 企业数据聚合

内容管理

  • 网站迁移和备份
  • 内容聚合和分发
  • SEO分析和优化

开发路线图

  • 图爬虫: 使用图搜索算法进行智能网站遍历
  • 问题驱动爬虫: 自然语言驱动的网页发现和内容提取
  • 知识最优爬虫: 在最小化数据提取的同时最大化知识获取
  • 代理爬虫: 复杂多步骤爬取操作的自主系统
  • 自动化模式生成器: 将自然语言转换为提取模式
  • 领域特定爬虫: 针对常见平台的预配置提取器

社区和支持

Crawl4AI拥有活跃的开源社区支持,欢迎贡献代码、报告问题和提出建议。项目遵循Apache 2.0许可证,完全开源且免费使用。

总结

Crawl4AI代表了网页爬虫技术的最新发展,特别是在AI时代的背景下。它不仅提供了传统爬虫的所有功能,还专门为现代AI应用进行了优化,使其成为数据科学家、AI研究人员和开发者的理想选择。通过其开源特性和活跃社区,Crawl4AI正在推动网页数据提取技术的民主化和标准化。