2025 年最佳開源爬蟲工具與軟體評比 | Thunderbit

最後更新於 August 18, 2026
2025 年最佳開源爬蟲工具與軟體評比 | Thunderbit
AI 摘要
這篇整理沒有用彼此無關的測試來硬排名次,而是把 9 款開源爬取工具放到同一個 benchmark 裡比較。它檢視了 Crawl4AI、Firecrawl、trafilatura、Crawlee、Playwright、Puppeteer、Scrapy、Colly 與 Scrapling 在靜態頁、JavaScript 渲染頁、文章抽取、HTTP 錯誤、爬行圖、安裝負擔、輸出形式與授權上的表現。文章的核心觀點是:沒有單一最佳爬蟲,真正的選擇取決於你要的是 LLM-ready 文字、瀏覽器渲染、HTTP 爬行,還是能自適應版面變化的選擇器恢復能力。文末也提供每個單工具評測的連結,方便你進一步查看證據。

幾乎每一篇「最佳開源爬蟲」總整理都有一個不太起眼的問題:沒有人拿相同的頁面去測試所有工具。Scrapy 可能拿新聞文章來測,Playwright 用某個電商示範頁,Colly 則是作者手邊剛好有什麼就拿什麼來跑——接著這些工具又被硬生生排成高下,好像那些數字真的能放在一起比。其實,那份排名反映的是頁面,不是工具本身。

所以我做了這件看似無聊、卻最該有人做的事:我先設計了一組統一的測試樣本,然後把九個工具全部丟進去跑。內容包含靜態商品目錄、由 JavaScript 渲染的商品目錄、藏在導覽列與頁尾雜訊中的文章、刻意製造的 HTTP 500 錯誤、小型內部連結爬取圖,以及兩個公開練習網站。相同的真值、相同的指標、每一次都一樣。腳本與原始輸出都放在這個公開的 benchmark repo 裡,你可以自己重新跑一次。最後得到的結果,並不是那些總整理常常 обещует 的整齊排行榜——因為根本沒有單一冠軍。真正的情況比較像:有三種不同工作,而這九個工具幾乎會自然而然地各自歸位。

試用 Thunderbit 進行網頁資料擷取

測試是怎麼做的,以及我先說出口的唯一限制

Benchmark comparison dimensions

每個工具都被放進相同的測試形狀:12 個分布在兩頁的靜態商品、8 個在延遲後由 JavaScript 注入的商品、包在導覽列/頁尾樣板中的一篇真實文章、刻意回傳 500 的伺服器錯誤、以及一張內部連結圖。正因為這樣設計,結果才能對齊——像「8/8 動態商品」這種數字,不管是 Puppeteer 還是 Crawlee 跑出來,意思都完全一樣。

但這裡有個多數總整理都會跳過的界線。每個工具的資料包都各自複製了那些測試樣本,所以絕對字元數不能在工具之間直接比較——請把它們視為「工具內」訊號,而不是跨工具比分。真正可以互相比較的,是召回率(可視為比例)、JavaScript 成功/失敗,以及結構行為。還有一個同樣重要的範圍註記:Crawl4AI 的靜態目錄測試只涵蓋第一頁,所以它的 6/6 代表的是較小範圍內的完整召回;其他工具則抓了兩頁,因此是 12/12——這是範圍較小,不是漏抓一半。更完整的推理過程,逐一對應每個測試樣本,都放在 方法說明 裡。

在看數字之前,還有一個提醒。每個資料包也都有一個暫時性的研究分數,但我刻意沒有把它們做成排行榜。那些分數只是我用來檢查各工具是否符合其自身證據的內部輔助,不是聯盟積分榜——如果把它們公開成排名,反而會重演這整個研究想避免的「看起來很精準,其實不精準」問題。這篇文章是對測試結果的整合,不是積分板。

全部工具,一次看懂

沿著這張表的兩欄看下去——「支援 JS 渲染?」和「內建爬取佇列」——三種工作型態幾乎就自己現形了。

工具語言支援 JS 渲染?靜態召回率結構化輸出內建爬取佇列安裝負擔授權
Crawl4AIPython是(瀏覽器)6/6(第一頁)CSS schema內建 BFS/DFS重(2 套瀏覽器堆疊)Apache-2.0
Firecrawl自架是(playwright-service)完整 Markdown/v1/crawl最重(6 個容器)AGPL-3.0
trafilaturaPython3/3 文章否(純文字)Apache-2.0
CrawleeNode/TS引擎可選12/12透過抽取有(RequestQueue)中(+~80 MiB)Apache-2.0
PlaywrightNode/multi12/12手動否(需自行寫 BFS)中(瀏覽器)Apache-2.0
PuppeteerNode是(Chrome)12/12手動否(需自行寫 BFS)中(Chrome)Apache-2.0
ScrapyPython12/12Feed 匯出(JSON/CSV/XML)有(內建)中(Twisted 依賴)BSD-3
CollyGo12/12透過 callback深度控制輕(1 個 binary + Go)Apache-2.0
ScraplingPython否(HTTP 擷取器)12/12中([fetchers]BSD-3

三大開源爬蟲家族

順便說明一下上表以及下文中的中繼資料:星數與版本號是 2026 年 7 月初擷取的,而這些資訊變動很快。若要把它們當成「現在」的數字,請先到各專案的 GitHub 和套件頁重新確認。

單一工具的深度評測索引

這份總評中的每個專案,都有對應的深度評測:

以下是它們的封面,以及兩張來自 JavaScript 測試的真實截圖,讓「8/8 動態資料」不只是紙上的數字。

Crawl4AI review cover

Firecrawl review cover

trafilatura review cover

Playwright vs Puppeteer review cover

Playwright rendered dynamic fixture screenshot

Puppeteer rendered dynamic fixture screenshot

Crawlee review cover

Scrapy review cover

Colly review cover

Scrapling review cover

工作一:把網頁變成可供 LLM 使用的文字

LLM-ready vs browser vs HTTP workbenches

如果你要的是能直接餵進 RAG pipeline 的乾淨 Markdown,那麼真正能打的只有三個工具,而且它們的設計方向完全不同。

Crawl4AI 底層其實是一個由瀏覽器驅動的 Markdown 產生器。順帶一提,搜尋結果頁面常跟它綁在一起宣傳的「adaptive intelligence self-learning selector」說法,值得先劃掉:它其實沒有這種功能——那是另一個套件的特性(等到談 Scrapling 時我會再說)。但它真正做的事,做得不錯。在 Books to Scrape 練習網站上,它輸出了 13,476 個字元 的 Markdown,並且能用 CSS schema 做結構化擷取;它內建的 BFS 深度爬取則在爬圖測試中走了 5 個頁面,同時也成功渲染了 JavaScript 頁面並截圖。不過它有兩個明顯缺點:原始 Markdown 會保留頁面樣板內容,除非你開啟內容過濾;而那個刻意製造的 500 錯誤回應結果是 success=false,原因不是它漂亮地辨識了 HTTP 錯誤,而是它自己的內容判斷把那段很短的錯誤頁內容標成了 minimal_text ... blocked。再加上安裝會把兩套瀏覽器堆疊丟進你的磁碟。版本 0.9.0、Apache-2.0,截至 2026 年 7 月初大約 7.1 萬星。

Firecrawl 是裡面最重的一個,而自架真的能跑——我說「真的」是因為那套六容器堆疊(api、playwright-service、redis、rabbitmq、nuq-postgres、foundationdb)確實順利啟動,並且從同一個 Books to Scrape 頁面產出了 9,222 個字元 的 LLM-ready Markdown。它透過內建的 playwright-service 渲染 JavaScript 頁面,腳本後的 Einstein 引言也出現在輸出中,證明渲染是真的有做。過程中遇到的兩個障礙,其實都是環境問題,不是 Firecrawl 本身的問題;這裡我講清楚,免得有人照著做時修錯地方:從原始碼建置時,colima 底下的 containerd snapshotter 出現了偶發性問題(我改用預先建好的映像檔),而 colima 的 198.18.x.x DNS 範圍也觸發了 Firecrawl 的 SSRF 防護,我則用 ALLOW_LOCAL_WEBHOOKS=true 解掉——這是本機開發的變通法,正式部署時不應該這樣關。它的自架核心也沒有 Fire-engine,也就是雲端版本的 anti-block 層;我也沒有測試雲端 API。更大的警訊是授權:Firecrawl 的自架核心是 AGPL-3.0,這不是註腳,而是在商業使用前一定要認真研究的法律事項。到 2026 年 7 月初,大約 14.8 萬星。

trafilatura 是這組裡最逆風的一個,也是 AI 熱潮清單最容易忽略的那種工具。沒有瀏覽器,沒有結構化列,只有用純 Python 快速、乾淨地抽取文章文字。在文章測試樣本中,它抓出了標題與 3 段中的 3 段真實內文,完整去掉樣板內容,完全沒有混入「Login」「Subscribe」或「Copyright」,同時還把作者與日期也一起取回。在一個公開商品頁上,它則輸出了 1,324 個字元的乾淨文字。它的限制正是設計所決定的:如果把它指向商品目錄,它會回傳 12 個商品名稱文字,但 0 筆結構化資料列——文字有了,結構沒有,而且它不會渲染 JavaScript。版本 2.1.0(目前版本)、Apache-2.0、約 6,200 星。若只是要抽文章,它會是我第一個想到的工具。

那兩個 Markdown 字元數——Crawl4AI 的 13,476、Firecrawl 的 9,222——都來自同一個公開頁面,但不要把它們理解成品質落差。它們反映的是不同的 Markdown 策略(也就是各自保留多少頁面外框),不是在判斷誰的輸出比較好。這正是前面提到的「工具內訊號」原則,只是現在攤在檯面上而已。

工作二:穩定地渲染 JavaScript

JavaScript rendering decision

有些資料就是不會出現在 HTML 裡,直到 script 執行之後才冒出來;這時候,真正的瀏覽器就不是可選項了。這個工作有三個工具能做,而其中兩個幾乎可說是同一個工具。

Playwright 和 Puppeteer 在我丟給它們的每一項測試上都打平。兩者都在本地樣本上渲染出 8/8 個動態商品,在公開的 Quotes JS 網站上也都拿到 10 筆;兩者都完成了 12/12 的靜態召回,且對 500 錯誤的處理也都很乾淨(Puppeteer 會回傳 response 物件而不是直接丟錯)。兩者都沒有內建爬取佇列,因此都得手寫 BFS,而這個 BFS 在爬圖中跨深度 0–2 走到了 12 個頁面。真正的差別只在覆蓋範圍:Playwright 可驅動 Chromium、Firefox 與 WebKit,並支援 Python 和 .NET;Puppeteer 則是以 Chrome 為主、只支援 Node。這裡也有兩個版本聲明,因為版本變動很快:我測的是 Playwright 1.56.0(對照當時最新 1.61.1),而且只跑 Chromium;Puppeteer 則是 24.16.0(對照當時最新 25.3.0)——請自行重新跑過,或在比較時適度折算。兩者皆為 Apache-2.0,星數約 92k 與 95k。

Crawlee 則是那個把其他兩者都沒解決的「佇列問題」補起來的工具。它把 Cheerio(HTTP)引擎與 Playwright(瀏覽器)引擎包在同一套 API 底下,而單看同一個頁面的表現,就能看出它的賣點:Cheerio 引擎看不到任何 0 個 JavaScript 注入項目;Playwright 引擎則在本地拿到完整的 8/8(在公開站點上則是 10 筆);兩者之間切換只需要改一行。它還提供真正的 RequestQueue,這也是它能被歸在這個工作,而不是下一個工作的原因。只是有個很多介紹都不會寫進標題裡的代價:瀏覽器引擎需要另外跑一次 npx playwright install,大約 80 MiB,npm install crawlee 不會自動幫你下載。版本 3.17.0、TypeScript、Apache-2.0、約 24.6k 星。

工作三:不用瀏覽器,快速爬取

如果頁面沒有 JavaScript,那用瀏覽器反而是昂貴的過度設計。這裡有三個以 HTTP 為先的工具同場競爭,各自代表一種語言/生態哲學,而且它們的差異很有意思。

Scrapy 是這群裡工程化程度最高的框架——spider、JSON/CSV/XML feed 匯出、AutoThrottle,該有的都有。它拿下了 12/12 的靜態召回,抓到文章的 3/3 段內文,在爬圖中跨深度 0–2 走了 11 個頁面,並且透過 handle_httpstatus_list 成功接住 500。它最有意思的是整體思路:它不渲染,它是重放請求。拿去測 JavaScript 頁面時,它得到的是 0 個節點;但同一頁背後的 JSON API 卻讓它拿到了 8/8。這就是 Scrapy 的哲學:找出頁面實際發出的請求,把它重播一遍,而不是去驅動瀏覽器。代價則是一套不小的依賴堆疊(Twisted、lxml、parsel),而且我只在小型測試樣本上驗證它。版本 2.17.0、BSD-3-Clause、約 63k 星。

Colly 是 Go 的答案,而且它對自己是什麼講得非常直接:一個靜態 binary,透過 OnHTMLOnResponseOnError 進行 callback 驅動,再加上深度控制。它漂亮地拿下 12/12 的靜態召回,透過 OnResponse 從 JSON API 抓到 8/8,經由 OnError 接住 500,並且在深度 2 的爬取中走到了 17 個頁面——這裡我會特別這樣寫,因為那個頁面數是測試框架自己的計數,不是 Colly 承諾能保證完整覆蓋的意思。它不做 JavaScript:動態樣本與 Quotes JS 網站都回傳 0,這本來就是設計如此。你需要 Go toolchain 才能建置它,而且目前 module 版本(v2.3.0)已經比標記版(v2.2.0)超前。Apache-2.0、約 25k 星。

Scrapling 是專門型工具,而且它確實配得上這個稱呼。它的 adaptive selectors 會在 DOM 結構變動後重新定位元素——所以當我把目標元素的 HTML class 從 product-name 改成 product-title 時,一般 selector 會抓到 0,但 adaptive re-match 仍然成功找回原本追蹤的元素。在純 HTTP 擷取上,它同樣拿到 12/12 的靜態召回與 8/8 的 JSON API 結果。它文件裡也沒避諱的一點是:在一個合成的多元素測試中,它只找回 3 個中的 1 個——這代表的是「可恢復的元素追蹤」,不是全面復原,所以別把它想得太神。它基礎安裝 pip install scrapling 還要加上 [fetchers] 才能啟動,而 StealthyFetcher 更像是合規上的提醒,不是我會拿來做簡報的賣點。版本 0.4.10(目前版本)、BSD-3-Clause、約 68.7k 星。

這三種工作背後的共同規律

把這九個工具排在一起,你會看到一個很乾淨的結論。對所有以 HTTP 為核心的工具來說,靜態完整召回——也就是平平的 12/12——只是入場券;它們沒有誰在簡單題目上翻車,所以那不會是區別優劣的重點。瀏覽器工具只有在真的碰上 JavaScript 時,才值得它們額外的重量,而它們也都會在安裝上付出代價:要嘛是一整套瀏覽器堆疊,要嘛是額外安裝,要嘛是一個完整的容器艦隊。而「內建爬取佇列」這一欄,本質上就是框架與引擎之間的分界線——Scrapy 和 Crawlee 幫你做好編排,Playwright 和 Puppeteer 則要你自己把 BFS 寫出來。這就是整個領域的輪廓。沒有誰能拿下總冠軍,因為大家根本不是在玩同一種比賽。

那到底該選哪一個?

這份測試不肯選出單一冠軍,因為正確答案不是某個工具,而是一個問題:你在做三種工作中的哪一種?

  • 需要可直接給 LLM 用的 Markdown? 如果你要的是乾淨文章文字,選 trafilatura;如果你同時需要 CSS 擷取與 JavaScript 渲染,而且希望都包在同一個套件裡,選 Crawl4AI;如果你要的是自架服務,且能接受 AGPL-3.0 授權與六容器的重量,就選 Firecrawl。
  • 需要 JavaScript 渲染? 只看原始渲染能力,Playwright 或 Puppeteer 都可以;請依引擎與語言來選,因為其他表現幾乎打平。若你還想要爬取編排一起包好,Crawlee 會更合適。
  • 要在沒有瀏覽器的情況下,大規模爬靜態頁或可重現的 API? Scrapy 適合完整的 Python 框架;Colly 適合追求 Go 的純粹速度與單一 binary;而當你最在意的是「結構改版後還能不能活下來」,Scrapling 就很對症。

工具要對工作,這些選擇都說得通。選錯類別——例如拿瀏覽器工具去抓純靜態頁,或拿 HTTP parser 去處理 JavaScript 應用——就算網路上評分最高的庫,也一樣會讓你失望。

那麼,託管式 AI API 又該放在哪裡?

Firecrawl AGPL-3.0 license callout

上面這些工具全都是免費、開源,而且都可以自己部署。這同時也是這次測試一再浮現的共同代價:你得自己負責瀏覽器環境、爬取程式碼、反爬攻防,以及所有維護工作。對很多團隊來說,這種掌控力正是重點;而且當你要承擔責任時,授權版圖也很重要——這一領域大多是寬鬆授權(Crawl4AI、Crawlee、Playwright、Puppeteer、Colly 都是 Apache-2.0;Scrapy 與 Scrapling 是 BSD-3),只有 Firecrawl 的自架核心是 AGPL-3.0,需要在商業用途前特別審視。

但你也要注意,這份測試同時揭示了這些工具「做不到什麼」。渲染、爬取、結構化、以及繞過封鎖——很少有工具能一次全包,而且幾乎都得靠你自己維護。託管式 AI 擷取 API 的價值,就是把整個堆疊濃縮成一個呼叫。Thunderbit 自家的開發者介面就是其中一個選項;對技術使用者來說,重點不是瀏覽器擴充功能,而是 API、MCP server 與 CLI。POST /distill 會回傳乾淨 Markdown,POST /extract 則回傳 schema 定義好的 JSON;JavaScript 渲染與反爬則在伺服器端處理,而不是由你的電腦負責。也有正式的 MCP server 可供 agents 與 coding assistants 使用——先用 thunderbit_suggest_fields 免費規劃抽取欄位,再用 thunderbit_distill(1 點)與 thunderbit_extract(20 點)執行;另外還有可用 npx @thunderbit/thunderbit-cli 直接安裝的 CLI,適合終端機與 cron 工作。若你的團隊裡還有非工程人員,也可以使用免程式的 Chrome extension,而 pricing 也同時涵蓋這兩種需求。

而這裡的取捨,其實和整份測試一直在迴圈的問題一樣:你要自己免費維運最多九個函式庫,還是把基礎設施交出去、按次付費?兩種都沒有錯,只是看你到底想掌握多少層堆疊。如果你想先看實際抽取效果,可以到 Thunderbit YouTube 頻道 了解操作流程。

結論

不存在單一最佳的開源爬蟲;任何自信地丟給你一個答案的清單,都默默藏起了真正決定結果的問題:你到底在做三種工作中的哪一種?把網頁變成文字、渲染 JavaScript、或是在沒有瀏覽器的情況下快速爬取——整個市場其實乾淨地分成這三類,而每一類裡的選擇,最後都取決於語言與安裝負擔,而不是什麼宇宙級冠軍。

如果你只從這篇文章帶走一個習慣,那就是:在正式採用之前,先用你自己的頁面測試。這裡的每一個數字都能在 benchmark repo 裡重現,原因正是如此——因為在一般總整理裡名列前茅的工具,和真正能撐住你真實目標網站的工具,往往不是同一個。

試用 Thunderbit 進行網頁資料擷取 Get Started Free

常見問題

最佳的開源網頁爬蟲是哪一個? 沒有單一答案,得看用途。若是要 LLM-ready 文字,可選 trafilatura 或 Crawl4AI;若要 JavaScript 渲染,可選 Playwright、Puppeteer 或 Crawlee;若要高速 HTTP 爬取,可選 Scrapy 或 Colly。在共同測試中,每個工具都只在自己的類別裡最強,離開類別後就明顯變弱,所以一刀切的排名很容易誤導。

哪些開源爬蟲可以渲染 JavaScript? Crawl4AI、Firecrawl、Playwright、Puppeteer,以及 Crawlee 的 Playwright 引擎都能渲染 JavaScript。Scrapy、Colly、trafilatura,還有 Scrapling 預設的 HTTP 擷取器都不行——它們要嘛得依賴頁面背後可重播的 API(這也是 Scrapy 的做法,並成功從 JSON endpoint 拿到 8/8),要嘛就得切換到另一種瀏覽器模式。

抓網站一定要用 headless browser 嗎? 只有在資料是 JavaScript 執行後才出現時才需要。若單純的 HTTP request 加 parser 就能拿到內容,那瀏覽器就是昂貴的過度配置;在這種情況下,Scrapy、Colly 或 Scrapling 都會更輕、更快。

這些工具裡,哪個最適合商業使用? 多數都屬於寬鬆授權:Apache-2.0(Crawl4AI、Crawlee、Playwright、Puppeteer、Colly)或 BSD-3-Clause(Scrapy、Scrapling)。例外是 Firecrawl 的自架核心,它是 AGPL-3.0;如果你要把它做成商業產品,最好先認真做授權審查。

這些 benchmark 數字可以重現嗎? 可以。每個 runner、fixture 與原始結果都放在公開且採 MIT 授權的 repo 裡。唯一要注意的是:召回率與結構結果可以跨工具比較,但絕對字元數只能當作工具內訊號,因為每個資料包都是各自複製測試樣本,而不是共享同一份標準副本——所以請比較比例與成功/失敗,不要比較原始字元總數。

Ke
Ke
Thunderbit 技術長|資深資料科學家與機器學習專家 Ke Shen 在機器學習與資料科學領域擁有近十年經驗,畢業於哥倫比亞大學,曾任 Walmart Labs 資深資料科學家。他精通 Python、R、Java 與統計學,且具備深受同儕認可的深厚專業,分享如何將複雜的 AI 演算法從理論落實到可投入生產的架構的實戰見解。
Topics
網頁爬蟲工具人工智慧網頁爬蟲
目錄
Thunderbit · AI 網頁資料代理

1 次點擊 內擷取任何頁面的資料

深受 250,000+ 用戶信賴
提供免費方案
從網頁到試算表
描述你需要的內容——Thunderbit 的 AI 代理會幫你爬取,並匯出到 Excel、Google Sheets、Airtable 或 Notion。免費即可開始。
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week