AI 爬蟲實作教學:利用 Crawl4ai 輕鬆對話來自動爬取資料

「爬蟲」一直是資料擷取領域中一個實用但極具挑戰性的技術。對於技術新手而言,入門門檻高,需要學習眾多前置知識,例如網路協定、HTML 結構、以及各種程式語言函式庫。而對於經驗豐富的開發者來說,爬蟲程式也並非一勞永逸,網站的版面或標籤(tag)一旦更新,原有的程式碼便可能失效,必須耗費時間重新調整。這使得維護爬蟲程式成為一項持續性的工作。

然而,有一項開源專案在 GitHub 上橫空出世,徹底顛覆了這個局面。它利用人工智慧技術,大幅簡化了爬蟲流程。無論你是技術新手還是資深開發者,Crawl4ai 都能讓你更輕鬆地應對爬蟲的各種挑戰。這不僅降低了技術門檻,也提高了程式的穩定性與適應性,讓開發者不再需要擔心網站改版所帶來的程式失效問題。那就是最近很紅的Github Repo - Crawl4ai 。

test

圖一:Crawl4ai的stars數成長圖

傳統爬蟲的方法與困境

「傳統爬蟲」的具體步驟通常是以下這幾個:

  1. 瞭解目標網頁
    首先先觀察網站的 HTML、CSS、JavaScript 的結構,然後再從中去找取自己需要的 tag 在哪裡。
  2. 發送 HTTP 請求
    發送一個 HTTP 請求到目標網址。這個請求就像是你的瀏覽器向網站伺服器發出「請把這個網頁的內容給我」的指令。
  3. 解析網頁內容
    拿到 HTML 原始碼後,需要將這些文字解析成可以被程式讀懂的結構化資料。
  4. 儲存資料
    成功提取資料後,將其儲存成自己想要的格式。


儘管這些步驟看起來簡單,但在實作過程中,傳統爬蟲會面臨許多挑戰與困境,這些困境通常來自於網站的設計與維護方式。像是其實每一個你想要爬的文章的 CSS 都不一樣,以及可能你想要爬的東西,它沒有規律性,這樣子在撰寫爬蟲程式時,就會面臨很大的困境。


Crawl4ai:為 AI 而生的網路爬蟲工具

Crawl4ai 是一個專為人工智慧(AI)設計的開源網路爬蟲與資料擷取工具。它的核心使命是為大型語言模型(LLM)和 AI 代理提供乾淨、結構化的網路資料。它能快速且高效地從網頁上抓取大量資料,表現甚至超越許多付費工具,並將雜亂的 HTML 內容轉換為整潔的 JSON 或 Markdown 格式,大幅減少資料後處理的時間。


Crawl4ai 針對不同使用者提供了兩種主要爬取策略,以滿足不同需求:


  • JsonCssExtractionStrategy (適用於技術人員):如果你具備爬蟲相關知識,可以直接使用這個策略。只需要定義一個 JSON Schema,利用 CSS 選擇器精準指定要抓取的 HTML 標籤(tag),就能確保輸出的資料是乾淨且結構化的 JSON 格式,這提供了高度的控制性與精準度。
test

圖二:JsonCssExtractionStrategy code

  • LLM extraction strategy (適用於技術小白):如果你是技術小白,這個策略將是你的得力助手。你無需了解網頁原始碼,只需在 instruction 中用自然語言描述你的目標(例如:「請幫我抓取所有產品的名稱與價格」),Crawl4ai 就會利用 AI 自動完成爬取。同樣地,你也可以定義 JSON Schema 來指定輸出格式。
test

圖三:LLM extraction strategy code

另外,Crawl4ai 也提供了多項強大功能,幫助使用者應對各種爬蟲挑戰:


  • 自訂 JavaScript 執行:透過 CrawlerRunConfig 中的 js_code 參數,你可以預先寫好一段 JavaScript 程式碼,讓程式在爬取前執行。這個功能非常適合需要先點擊特定按鈕(例如像是 PTT 頁面中的「我已滿十八歲」)才能進入目標網站的情況。

  • 動態網站爬取:如果你遇到的是動態載入內容的網站(例如需要下拉頁面才能載入完整內容),可以在 CrawlerRunConfig 中設定 scan_full_page  scroll_delay 參數。scan_full_page 會模擬使用者下拉頁面的動作,而 scroll_delay 則能控制下拉速度,確保網頁內容有足夠的時間載入,避免回傳不完整的結果。

  • 模擬使用者操作:如果想觀察程式如何模擬使用者行為,可以將 BrowserConfig 中的 headless 參數設為 False,這樣在執行時就會跳出瀏覽器視窗,讓你直接看到瀏覽器模擬點擊、滾動等操作的過程。方便使用者查看可能錯誤的原因在哪邊。
test

圖四:CrawlerRunConfig & BrowserConfig code

總結來說,Crawl4ai 不僅大幅簡化了爬蟲流程,更透過 AI 賦予爬蟲更高的適應性與智慧,讓資料擷取變得更有效率、更具彈性,同時也降低了技術門檻。由於方法泛化性的問題,我們本次文章以下的內容都會以 LLM extraction strategy 的角度來做說明。

適用情境一:PTT

現在我們想要去爬取 PTT Gossiping 中某篇貼文的內容(範例網址為:https://www.ptt.cc/bbs/Gossiping/M.1756802159.A.7D8.html) ,此時我們首先要有目標網站的網址、我們想要程式 output 的 schema ,以及在 instruction 的地方輸入我們希望它達成的事情(例如: 幫我找這個網址的所有評論),得到網址之後,如果我們什麼參數都沒做設定,只是簡單地做爬取的話,其實只會進入到認證畫面(見圖五),無法成功獲取我們想要的資訊,這個時候我們就必須想辦法讓程式去模擬點擊「我已滿18歲」這個 button,此時可以請 LLM 先去產出一段 javascript code,然後將其放入 js_code 這個 argument 當中。

當我們重新執行爬蟲時,程式會先執行這段 javascript code,成功通過年齡驗證頁面(見圖六),最終獲取到我們想要的資料,並按照預設的格式輸出。(見圖七)

test

圖五:認證畫面

test

圖六:目標網站內容

test

圖七:最終輸出 json 檔結果

適用情境二:Dcard

現在我們想要去爬取 Dcard 的一篇文章的內容(範例網址為:https://www.dcard.tw/f/funny/p/259704226),與情境一相同,我們一樣要先有目標網站的網址、想要的 output schema 以及在 instruction 的地方輸入我們希望它達成的事情。Dcard 與 ptt 的機制不太相同,不會先有一個認證畫面,因此我們不需要去撰寫 javascript_code 來模擬點擊之類的。

但是比較麻煩的點是,不同於 PTT 是靜態網站,Dcard 是動態網站,必須要經由滾動,才能獲得完整的原始碼,因此,此時我們必須要去設定 CrawlerRunConfig 中的 scan_full_page  scroll_delay 參數。把scan_full_page 設定為 True,以及 scroll_delay 為 0.5,接著等待一下,就能成功獲取到我們想要的資料了。

test

圖八:目標爬取網站

test

圖九:經由滾動後的目標爬取網站的評論

test

圖十:最終輸出 json 檔結果

傳統爬蟲 V.S. Crawl4ai

左右托拉查看表格資訊

特點

傳統爬蟲 (自行撰寫程式)

Crawl4ai (爬蟲即服務)

技術方法

使用 Python 等程式語言與函式庫,從零開始撰寫爬蟲腳本。

呼叫 Crawl4ai 提供的 API 服務。

主要優勢

高度客製化,完全掌控所有細節。成本低,除了時間和人力,幾乎沒有額外費用。

使用簡單,省去開發與維護時間。處理能力強,能有效處理動態網站與反爬蟲機制。

主要劣勢

技術門檻高,需具備程式與網路知識。維護困難,網站結構一變動,程式就失效。容易被阻擋,難以處理複雜的反爬蟲機制。

功能自訂空間有限,難以進行深度客製化。需付費(LLM-based),成本會隨使用量增加。

適用對象

具備技術能力的開發者或團隊,目標網站結構簡單。

數據分析師、行銷人員或需要快速、大量獲取複雜網站資料的團隊。

面臨的挑戰 & 展望

儘管 Crawl4ai 在使用上相當方便,但是在實務上仍需設定許多參數,上面只是列舉了幾個比較實用的,這樣會造成在處理更複雜的網站時,技術小白有可能會感到不知所措。另外,在使用 LLM-based 的方法時, 會需要消耗大量的 Input token,動輒 100k ~ 1000k,會造成一定程度上的成本。


對於 context window 比較小的 LLM,雖然 Crawl4ai 內部會將其切分成多個部分,然後再進行多次 API 的發送,但這種做法可能會影響最終結果的精確度,並大幅增加等待時間。

而在 LLM-based 方法下會造成如此大量 token 的原因,是因爲整體的流程是先將整份 html 檔爬取出來,然後再送給 LLM 做處理,然而,實際上 HTML 中真正有價值的資訊往往不到總量的一成。因此,如果未來能在送進 LLM 前快速的萃取出重要的內容,那不僅可以大幅度地降低成本,也可以縮短回覆時間。


Contact CloudMile

聯絡我們

不論產業,我們擁有豐富的服務經驗

Phone Number

電話

  • TW+886
  • TW+886
  • Reason for Inquiry

    諮詢服務

  • Electrum Advisory 策略諮詢

  • MileInfra 雲端基礎架構現代化

  • 企業教育訓練

  • MileSec 多雲資安防禦與維運

  • MileData 雲端數據管理與⾃動化

  • MileOps 混合雲多雲雲端維運

  • MileAI 企業⽣成式 AI 應⽤與創新

  • LumiTure.ai 以 AI 驅動的FinOps 平台

  • 其他

  • 請填寫電子信箱