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正在推動網頁資料提取技術的民主化和標準化。