Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取

Crawl4AI: 賦能AI用戶的開源智能網頁爬蟲與數據提取

在當今人工智能時代,網絡爬蟲扮演著至關重要的角色。它們不僅是數據收集的強大工具,更是驅動機器學習、自然語言處理等技術發展的關鍵引擎。

然而,對于用戶來說,在面對復雜多變的網絡環境和各異的網站結構時,常常會遇到諸多挑戰。爬取中文網站時,編碼問題、反爬機制、以及對中文語義的理解都成為了阻礙數據獲取的絆腳石。

正是在這樣的背景下,我發現了 Crawl4AI,一款專為大型語言模型(LLM)和人工智能應用設計的高效、靈活且完全開源的網頁爬蟲與數據提取工具。

它致力于降低用戶在數據獲取方面的門檻,賦能開發者以快速、高效、便捷的方式從網絡中提取所需信息。

概覽

Crawl4AI 是一款功能豐富、且對 LLM 非常友好的爬蟲框架。它擁有以下核心優勢:

  • 完全開源且免費:Crawl4AI 采用 Apache 2.0 協議,允許用戶自由使用、修改和分發,無需擔心付費或商業限制。
  • 專為 AI 設計:自動將網頁內容轉換為結構清晰、簡潔的 Markdown 格式,極大地簡化了 RAG(檢索增強生成)流程和微調任務的數據獲取步驟。
  • 速度快,效率高:Crawl4AI 擁有出色的性能,能夠在短時間內抓取大量頁面,并通過啟發式算法降低對昂貴模型的依賴。
  • 高度靈活可配置:支持多種配置選項,包括自定義 User-Agent、代理設置、會話管理等,輕松應對各種反爬策略。

核心優勢

Crawl4AI 的強大之處體現在以下幾個核心方面:

  1. 速度與效率
    Crawl4AI 追求極致性能,憑借其架構優化,能以極快的速度抓取網頁。與同類工具相比,Crawl4AI 在速度上具有顯著優勢。

  2. 靈活的配置

    Crawl4AI 提供了兩個核心配置類,BrowserConfig? 和 CrawlerRunConfig?,方便用戶靈活地定制爬蟲的行為:

    • ?BrowserConfig?:用于配置瀏覽器級別的設置,例如是否啟用無頭模式、設置 User-Agent、配置代理等。
    • ?CrawlerRunConfig?:用于配置單次抓取任務的行為,例如緩存模式、內容選擇、內容過濾、JavaScript 執行等。
  3. 多結構數據提取

    Crawl4AI 支持多種數據提取策略,能夠從網頁中提取出結構化的信息:

    • JSON CSS Extraction:使用 CSS 選擇器從結構化的網頁中提取數據,速度快、效率高。
    • JSON XPath Extraction:使用 XPath 表達式從 XML 或 HTML 文檔中提取數據,更加靈活。
    • LLM Extraction:結合大型語言模型,從非結構化的網頁中提取信息,適用于處理復雜或語義化的內容。
  4. 可擴展的大規模數據處理能力
    Crawl4AI 通過內存自適應調度器(MemoryAdaptiveDispatcher?)來支持大規模并發爬取,可以根據系統內存使用情況動態地調整并發任務數量,防止內存溢出,保證爬蟲的穩定運行。同時還提供了流式處理的支持,能夠在抓取的同時處理數據,無需等待所有任務完成,大大提高了效率。

  5. 協議支持
    Crawl4AI 默認支持 HTTP(S) 協議,但同時也考慮到網絡爬蟲的倫理和法律問題,提供了 robots.txt? 協議的支持,可以通過設置 check_robots_txt=True? 來遵守網站的爬取規則,避免對網站造成不必要的負擔。

快速上手

以下是使用 Crawl4AI 的快速上手指南:

1. 安裝

使用 pip 安裝 Crawl4AI:

pip install crawl4ai
crawl4ai-setup
2. 編寫 Python 腳本

創建一個 Python 腳本,例如 crawl.py?,并添加以下代碼:

import asyncio
from crawl4ai import AsyncWebCrawlerasync def main():async with AsyncWebCrawler() as crawler:result = await crawler.arun(url="https://www.example.com")print(result.markdown[:500])if __name__ == "__main__":asyncio.run(main())
3. 運行腳本

在命令行中運行該腳本:

python crawl.py
4. 使用命令行界面(CLI)

如果你只需要快速的抓取一個網頁,可以使用我們提供的CLI工具:

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

高級功能

Crawl4AI 提供了許多高級功能,可以滿足各種復雜的爬取需求。

1. 高級的網頁遍歷方法:深度爬取

Crawl4AI 支持深度爬取,可以通過配置 deep_crawl_strategy? 參數來控制爬取的深度和范圍。目前支持三種深度爬取策略:

  • ?BFSDeepCrawlStrategy?(廣度優先搜索):逐層遍歷網頁。
  • ?DFSDeepCrawlStrategy?(深度優先搜索):沿著一條路徑深入挖掘,直到無法再深入為止。
  • ?BestFirstCrawlingStrategy?:基于評分函數來決定下一個要爬取的鏈接,優先爬取最有價值的頁面。
2. 代理與安全

你可以通過 BrowserConfig? 中的 proxy? 或 proxy_config? 參數來配置代理,實現 IP 輪換和匿名爬取。

browser_config = BrowserConfig(proxy_config={"server": "http://proxy.example.com:8080","username": "user","password": "pass",}
)
3. 會話管理

通過設置 CrawlerRunConfig? 中的 session_id? 參數,可以在多次請求之間保持會話狀態,例如模擬用戶登錄后的操作。

run_config = CrawlerRunConfig(session_id="my_session"
)
4. 瀏覽器配置與用戶代理

你可以通過 BrowserConfig? 中的 user_agent? 參數來設置自定義的用戶代理,或者使用 user_agent_mode? 參數來隨機生成用戶代理,以模擬真實用戶的行為,避免被網站的反爬機制識別。

browser_config = BrowserConfig(user_agent_mode="random",user_agent_generator_config={"device_type": "mobile", "os_type": "android"},
)
5. LLM配置

Crawl4AI現在提供 LlmConfig? 對象,用于配置 LLM 提供程序。這簡化了在需要 LLM 的策略和函數中傳遞provider字符串、API 令牌和基本 URL 的過程,從而可以重復使用并快速試驗不同的 LLM 配置。
您可以通過以下兩種方式傳遞LLM密鑰:

a)在本地設置環境變量并在 LlmConfig 對象內部調用它

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"llm_config = LlmConfig(provider="openai/gpt-4", api_token=os.getenv("OPENAI_API_KEY"))

b)將 api_token 直接傳遞給 LlmConfig 對象:

llm_config = LlmConfig(provider="openai/gpt-4", api_token="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
6. 結構化數據提取

Crawl4AI 支持多種結構化數據提取方式,包括:

  • JSON CSS Extraction:使用 CSS 選擇器從 HTML 頁面中提取數據。
  • JSON XPath Extraction:使用 XPath 表達式從 HTML 頁面中提取數據。
  • LLM Extraction:使用大型語言模型從非結構化的文本中提取數據。
7. 內容過濾

Crawl4AI 提供了多種內容過濾策略,可以根據關鍵詞、BM25 算法或大型語言模型來過濾網頁內容,提取出最相關的信息。例如,使用 BM25ContentFilter? 可以根據用戶查詢來過濾網頁內容:

from crawl4ai.content_filter_strategy import BM25ContentFilterfilter = BM25ContentFilter(user_query="machine learning")

應用場景

Crawl4AI 在實際應用中擁有廣泛的應用場景:

  1. 研究助手:用于快速抓取和整理學術論文、研究報告等信息,輔助科研人員進行文獻綜述和數據分析。
  2. 數據分析:用于抓取電商網站的商品信息、社交媒體的用戶數據等,為商業決策提供數據支持。
  3. AI 模型訓練:用于構建高質量的訓練數據集,提升 AI 模型的性能。
  4. 新聞聚合:定時抓取多個新聞網站的內容,生成個性化的新聞摘要或報告。

?

?

提問環節:

請具體說明一下該項目的數據緩存和多網頁爬取?

1. 數據緩存

數據緩存是 Crawl4AI 的一項重要特性,它可以將抓取到的網頁內容保存在本地,下次再次請求相同頁面時,直接從緩存中讀取,而無需重新發起網絡請求。這極大地提高了爬取效率,并降低了對目標網站的訪問壓力。

1.1 緩存模式

Crawl4AI 使用 CacheMode? 枚舉類型來控制緩存行為。你可以在 CrawlerRunConfig? 中指定緩存模式:

from crawl4ai import CrawlerRunConfig, CacheModeconfig = CrawlerRunConfig(cache_mode=CacheMode.ENABLED)  # 啟用緩存(默認)

以下是 CacheMode? 的各個選項:

  • ??CacheMode.ENABLED??: 默認模式,先嘗試從緩存讀取數據,如果緩存不存在,則發起網絡請求,并將結果寫入緩存。
  • ??CacheMode.DISABLED??: 禁用所有緩存功能,每次都發起網絡請求。
  • ??CacheMode.READ_ONLY??: 只從緩存讀取數據,不寫入新數據到緩存。
  • ??CacheMode.WRITE_ONLY??: 只將數據寫入緩存,不從緩存讀取數據。
  • ??CacheMode.BYPASS??: 繞過緩存,直接發起網絡請求,并將結果寫入緩存。
1.2 清理緩存

Crawl4AI 提供了 aclear_cache()? 和 aflush_cache()? 兩個方法來管理緩存:

  • ?aclear_cache()?:清空數據庫中的所有緩存數據,但保留數據庫文件。

    async with AsyncWebCrawler() as crawler:await crawler.aclear_cache()
    
  • ?aflush_cache()?:直接刪除數據庫文件,下次使用時會重新創建數據庫。

    async with AsyncWebCrawler() as crawler:await crawler.aflush_cache()
    

2. 多網頁爬取

Crawl4AI 提供了 arun_many()? 方法,可以同時抓取多個網頁,大幅提升爬取效率。同時,Crawl4AI 通過調度器(Dispatcher)來控制并發數量,避免對目標網站造成過大的壓力。

2.1 使用 arun_many()? 方法
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls)  # 自動處理并發for result in results:if result.success:print(f"成功抓取:{result.url}")else:print(f"抓取失敗:{result.url},錯誤信息:{result.error_message}")if __name__ == "__main__":asyncio.run(main())
2.2 調度器(Dispatcher)

Crawl4AI 使用調度器來管理并發任務,主要有兩種調度器:

  • ?MemoryAdaptiveDispatcher?:根據系統內存使用情況動態調整并發數量,避免內存溢出。

    from crawl4ai import MemoryAdaptiveDispatcherdispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)
    
    • ?memory_threshold_percent?:內存使用閾值,當內存使用超過該值時,調度器會暫停任務。
    • ?max_session_permit?:允許的最大并發任務數。
    • ?check_interval?:檢查內存使用情況的間隔時間(秒)。
  • ?SemaphoreDispatcher?:使用信號量來控制并發數量,簡單直接。

    from crawl4ai import SemaphoreDispatcherdispatcher = SemaphoreDispatcher(semaphore_count=5)
    
    • ?semaphore_count?:允許的最大并發任務數。
2.3 使用示例:內存自適應調度器
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, MemoryAdaptiveDispatcherasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]dispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls, config=CrawlerRunConfig(), dispatcher=dispatcher)for result in results:if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.4 流式處理(Streaming)

?arun_many()? 也支持流式處理,可以在抓取的同時處理數據,無需等待所有任務完成。

import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]config = CrawlerRunConfig(stream=True)  # 開啟流式處理async with AsyncWebCrawler() as crawler:async for result in crawler.arun_many(urls=urls, config=config):if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.5 總結

這個項目的維護和更新也是比較頻繁,社區活躍度還是比較高,目前不用擔心不能使用的問題。

這也是我的日常獲取信息的工具,推薦有條件的朋友可以用用看。

項目地址:

Crawl4ai

點個關注,不麋鹿!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72708.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72708.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

下載b站視頻音頻

文章目錄 方案一:jjdown如何使用 方案二:bilibili嗶哩嗶哩下載助手如何使用進入插件網站插件下載插件安裝 使用插件下載視頻音頻:復制音頻下載地址 方案三:bat命令下載單個音頻下載單個視頻下載單個音視頻 方案一:jjdo…

【Git】linux搭建Gitea配置mysql數據庫

WindowsServer搭建內網Gitea【中文更方便使用】 1. 安裝Gitea # 下載 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 創建用戶 # 創建 gitea 用戶 sudo adduser --system --shell /bin/bash --comment Git Version Control --create-home --home-dir /…

AI繪畫軟件Stable Diffusion詳解教程(6):文生圖、提示詞細說與繪圖案例

文生圖即以文字描述來生成圖像,這是目前所有AI繪畫軟件的基本功能之一。要想畫一副好的圖片,除了選擇好的模型,在文生圖中,提示詞特別關鍵。 一、什么是提示詞(Prompt) 提示詞又稱創意、關鍵詞、咒語、ca…

MATLAB實現遺傳算法優化風電_光伏_光熱_儲熱優化

1. 問題定義 目標:最小化輸出負荷與需求負荷的偏差平方和。決策變量:每個時間步長的風電、光伏、光熱和儲熱輸出功率。約束條件: 風電、光伏、光熱的輸出功率不得超過其最大容量。儲熱系統的輸出功率(充放電)不得超過…

Ubuntu20.04本地配置IsaacLab 4.2.0的G1訓練環境(一)

Ubuntu20.04本地配置IsaacLab的G1訓練環境(一) 配置Omniverse環境配置IsaacSim配置IsaacLab 寫在前面,如果Ubuntu剩余空間低于60G,則空間不足,除非你不需要資產包。但資產包中卻包含了G1模型、Go2模型等機器人模型和代…

Linux文管讀寫書簽

文件:~/.config/gtk-3.0/bookmarks 格式:file://路徑 名稱,每個一行。 QTreeWidgetItem清空item所有子節點 讀取書簽 void MainWindow::genBookmark() {QString fp QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) &…

芋道打包時報錯:缺失@unocss插件

在遇到打包時,報這個錯誤,提示構建失敗是因為 ESLint 在加載 unocss 插件時,找不到 unocss/eslint-plugin 模塊 解決辦法:安裝缺失的依賴:保證unocss/eslint-plugin已經被正確安裝, 使用以下命令安裝&…

【JAVA架構師成長之路】【JVM實戰】第2集:生產環境內存飆高排查實戰

課程標題:生產環境內存飆高排查實戰——從堆轉儲到代碼修復的15分鐘指南 目標:掌握內存泄漏與OOM問題的系統性排查方法,快速定位代碼或配置缺陷 0-1分鐘:問題引入與核心現象 線上服務內存持續增長,觸發頻繁Full GC甚至OOM(OutOfMemoryError),導致服務崩潰。常見誘因:…

PROFINET轉PROFIBUS從案例剖析網關模塊的協議轉換功能

一、 案例背景 在當下追求高效協同的工業自動化生產體系里,設備間的無縫互聯互通堪稱關鍵要素。某企業的生產車間中,有一臺性能穩定的變頻器,其配備的是PROFIBUS接口。與此同時,操控整個生產線的核心大腦——西門子1500 PLC&…

flutter環境最新踩坑

## Flutter 開發常見問題排查與解決 ### 1. 項目初始化與依賴問題 bash # 清理項目 flutter clean # 獲取依賴 flutter pub get # 詳細日志運行 flutter run -v ### 2. 網絡和下載問題 - 網絡慢可能導致依賴下載卡住 - 使用 -v 參數可查看詳細日志 - 檢查網絡連接 - 可以嘗…

xss筆記與打靶(更新中)

這個文章好 https://blog.csdn.net/huangyongkang666/article/details/123624164?fromshareblogdetail&sharetypeblogdetail&sharerId123624164&sharereferPC&sharesource2401_88818565&sharefromfrom_link 什么是xss XSS(跨站腳本攻擊&…

Visual Studio 2022新建c語言項目的詳細步驟

步驟1:點擊創建新項目 步驟2:到了項目模板 --> 選擇“控制臺應用” (在window終端運行代碼。默認打印"Hello World") --> 點擊 “下一步” 步驟3:到了配置新項目模塊 --> 輸入“項目名稱” --> 更改“位置”路徑&…

SQL進階技巧:上課時長計算

目錄 0 問題描述 1 數據準備 2 問題解決 核心難點 時間區間標記與分組 區間合并與時長計算

HashMap 在多線程環境下可能引發哪些問題?如何解決?

HashMap 在多線程環境下可能引發哪些問題? 答案: 在多線程同時操作 HashMap 時,可能引發 死循環、數據丟失、臟數據讀取 等問題。 根本原因: HashMap 的設計是非線程安全的,多線程并發修改其結構(如擴容、…

告別GitHub連不上!一分鐘快速訪問方案

一、當GitHub抽風時,你是否也這樣崩潰過? 😡 npm install卡在node-sass半小時不動😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:傳統代理需要復雜…

【軟考-架構】2.1、操作系統概述-進程管理-同步互斥

?資料&文章更新? GitHub地址:https://github.com/tyronczt/system_architect 文章目錄 操作系統知識操作系統概述進程組成和狀態💯考試真題前趨圖進程資源圖💯考試真題問題1問題2 ?【重點】進程同步與互斥?💯考試真題問題…

基于開源庫編寫MQTT通訊

目錄 1. MQTT是什么?2. 開發交互UI3. 服務器核心代碼4. 客戶端核心代碼5. 消息訂閱與發布6. 通訊測試7. MQTT與PLC通訊最后. 核心總結 1. MQTT是什么? MQTT(Message Queuing Terlemetry Transport)消息隊列遙測協議;是…

在VScode下配置C/C++環境(tasks.json、launch.json、c_cpp_properties.json)

文章目錄 1. tasks.json、launch.json配置文件中參數(屬性)的說明2. tasks.json介紹3. launch.json介紹4. 直接生成tasks.json、launch.json配置文件的另外一種方式5. c_cpp_properties.json介紹6. 運行多個C/C文件7. 命令行方式編譯C 1. tasks.json、launch.json配置文件中參數…

ORB-SLAM2源碼學習(六):相機跟蹤(局部地圖跟蹤和關鍵幀創建)

目錄 1.局部地圖跟蹤 1.1 更新局部關鍵幀UpdateLocalKeyFrames 1.2 更新局部地圖點(來自局部關鍵幀)UpdateLocalPoints() 1.3 投影匹配 2. 對比四種跟蹤方式以及使用的投影匹配 3.關鍵幀創建 3.1 判斷是否需要創建新關鍵幀: NeedNewKeyFrame() 3…

PostgreSQL時間計算大全:從時間差到時區轉換(保姆級教程)

一、時間計算的三大核心場景 當你遇到這些需求時,本文就是你的救星🌟: 倒計時功能:計算活動剩余天數 用戶行為分析:統計操作間隔時間 跨國系統:多時區時間統一管理 報表生成:自動計算同比/環…