網路上的資料,
怎麼被「讀」進程式裡?
你聽到有人說 Firecrawl 出了一個很強、又免費的爬蟲工具。要判斷它強不強、該不該用、會不會踩雷,得先看懂「爬蟲」這整個世界。 這頁從零講起:爬蟲在做什麼、為什麼是個難題、市面工具怎麼分檔、免費跟付費差在哪,中間還有一個可以動手玩的 3D 控制台,讓你親眼看見「為什麼有些工具要收錢」。
一個網頁(本來是給人看的)
→ 程式把整頁抓下來(拿到 HTML 原始碼)
→ 從一堆標籤裡抽出你要的東西(標題 / 價格 / 內文…)
→ 存成乾淨格式(表格 / JSON / Markdown)
→ 餵給分析、資料庫,或現在最夯的 → 餵給 AI
爬蟲到底在做什麼?
「爬蟲」(web scraping / crawling)就是用程式自動化地讀網頁、把要的資料抽出來。 你用滑鼠開瀏覽器、用眼睛讀、手動複製貼上——爬蟲就是把這整套換成程式,一次處理幾百幾千頁,輸出成電腦能直接用的格式。
人怎麼讀網頁
- 打開瀏覽器 → 輸入網址
- 用眼睛找到要的內容
- 手動複製、貼到 Excel
- 一次一頁,量大就崩潰
爬蟲怎麼讀
- 程式發出請求 → 拿回整頁 HTML
- 用規則(selector)定位要的欄位
- 自動寫進 JSON / 表格 / 資料庫
- 一次幾千頁,可排程重複跑
三個常被搞混的動作
| 動作 | 英文 | 在做什麼 | 比喻 |
|---|---|---|---|
| 抓單頁 | Scrape | 給定一頁,把那一頁的內容抓下來、洗乾淨 | 影印「這一頁」 |
| 爬整站 | Crawl | 從一頁出發,自動發現並走遍很多頁(見 Part 06) | 翻完整本書再印 |
| 搜尋 | Search | 對一個搜尋索引/端點下查詢,拿回結果清單(底層可能用到 crawl,但對使用者是不同操作) | 查目錄決定要看哪幾頁 |
記憶點:爬蟲的本質是「把給人看的網頁,翻譯成給機器用的資料」。難的從來不是「抓」,是接下來幾節要拆解的牆。
關鍵心智模型:你看到的網頁 ≠ 原始碼
這節是整頁最重要的觀念。「網頁原始碼」和「你在瀏覽器看到的畫面」常常不是同一個東西。看懂這件事,後面的 headless 瀏覽器、JavaScript、Firecrawl 全都會一秒理解。
① 原始 HTML
伺服器第一手送來的純文字(瀏覽器「檢視原始碼」看到的)。最便宜抓,但可能是個空殼。
② DOM
瀏覽器把 HTML 解析成的一棵「節點樹」。程式就是沿著這棵樹去定位「第 3 個表格的第 2 欄」。
③ 渲染後畫面
JavaScript 跑完、資料載入後,你眼睛實際看到的樣子。常常比原始 HTML 多很多內容。
一個真實例子:從網頁到表格
抽象講完,看一個具體的。假設你要把某個「課程列表」頁面變成一張可用的表格。整個流程其實就五步:
指定要抓的那一頁 URL
抓回 HTML、(必要時)跑 JS 渲染成節點樹
「每個 .course 卡片裡的標題、講師、價格」
每張卡 → 一列 {標題, 講師, 價格}
去空白、轉數字 → CSV / Markdown
同一頁,兩種輸出
原始 HTML(一坨)
<div class="course"> <h3>心電圖判讀</h3> <span class="i">王醫師</span> <b>NT$1,200</b> </div> ...(再重複 50 次)
抽取 + 洗淨後
標題 講師 價格 心電圖判讀 王醫師 1200 影像判讀入門 李醫師 980 ... → 存成 CSV / Markdown 直接餵 Excel 或 AI
「selector」就是你給程式的定位規則。網站一改版,selector 失效,這條 pipeline 就斷了——記住這點,它是 Part 04 第四道牆的伏筆。
為什麼爬蟲很難?五道難關
如果每個網站都乖乖把資料攤在 HTML 裡、又歡迎你抓,那爬蟲就是十行程式的事。現實反過來——下面這五道牆,就是付費工具存在的理由。你付的錢,幾乎都在買「幫你翻過這些牆」。下一節你可以親手開關它們。
牆 1 · 動態頁面(JavaScript)
內容靠 JS 跑出來(見 Part 02)。只抓原始 HTML 會抓到空殼 → 必須開隱形瀏覽器渲染。慢、吃資源。
牆 2 · 反爬偵測 / 封 IP
網站偵測到「機器人流量」就封你 IP、丟 CAPTCHA、用 Cloudflare 擋。對策是輪流換代理 IP——乾淨住宅 IP 池本身就很貴。
牆 3 · 登入牆 / 付費牆
要登入才看得到的內容,爬蟲得帶你的登入狀態(cookie / session)才進得去。多數託管工具不幫你過登入。
牆 4 · 網站改版 → 程式壞掉
selector 一改版就失效。維護是隱形長期成本——託管服務的賣點之一就是「它幫你跟著修」。
動手玩:五道牆控制台(3D)
這就是上一節五道牆的可操作版。請求封包從左邊(URL)流向右邊(乾淨資料),每道牆預設是關的(紅色),封包會卡住。 打開對應的能力(開關),牆變綠、封包就能通過。右邊帳本即時算出你的成功率、吞吐、成本、維護負擔、法律風險——你會親眼看到:每開一道牆都要付代價,而真實工具就是把這些代價打包成不同方案。
預設方案 · 點一下套用
自己調下面的開關,或點一個方案看它怎麼配。
能力開關(=五道牆)
「爬整站」其實在做什麼?
前面多在講抓「一頁」(scrape)。但 crawler 的精髓是自己發現並走遍很多頁。它的邏輯像在迷宮裡有系統地探路:
起始 URL
→ 抓這頁,順便找出頁面上所有連結
→ 把新連結丟進「待辦佇列」(queue)
→ 每抓一頁就記進「已造訪集合」(visited set)→ 避免重複抓
→ 限制「深度」(depth):只往下幾層,免得整個網路都爬
→ 佇列空了,或到達上限 → 結束
為什麼需要「去重」
網站到處互相連結(首頁出現在每一頁)。沒有 visited set,爬蟲會一直重複抓同幾頁、無限繞圈。
為什麼需要「深度限制」
連結會無限展開。沒有 depth / 數量上限,一個 crawl 可能永遠跑不完、或把對方伺服器打爆(也不禮貌)。
工具光譜:從「自己寫」到「全託管」
所有爬蟲工具可以排成一條光譜。左邊=自己寫程式,最自由、最省錢,但每道牆自己扛;右邊=全託管服務,最省事、規模最大,但要付錢。沒有哪一檔「最好」,只有「對不對你的場景」。
BeautifulSoup
Firecrawl 自架
Jina Reader
ScrapingBee · Apify
ParseHub
免費 vs 付費,到底差在哪?
付費服務賣的不是「抓網頁」這個動作(免費工具也會),而是幫你解決那五道牆。具體說,你的錢買的是這六樣(對照剛剛的控制台):
| 你買的東西 | 免費 / 自架 怎麼辦 | 付費 / 託管 給你什麼 |
|---|---|---|
| 代理 IP 池 | 自己租或裸奔,容易被封 | 內建百萬住宅 IP 自動輪替(最大成本來源) |
| 反爬 / CAPTCHA | 自己研究怎麼偽裝、自己解 | 「隱身模式」一鍵過 Cloudflare(通常加價計費) |
| JS 渲染 | 自己架 headless 瀏覽器、自付伺服器 | 雲端幫你跑,你只管收結果 |
| 併發 / 規模 | 受你機器與頻寬限制 | 幾百併發、工業級吞吐 |
| 維護 | 網站改版你自己修 | 服務方持續維護、跟著修 |
| 可靠度 / 客服 | 沒人理你 | 成功率保證、SLA、技術支援 |
一句話:免費的不是「沒成本」,是把成本從錢轉成你的時間 + 你的風險。
真實價格參考
價格與額度經常變動,務必以各官網為準;這裡只給你「量級感」。下面已標註計價單位與查核日,避免被單一數字誤導。
| 工具 | 定位 | 入門價 | 免費額度 | 備註(計價單位) |
|---|---|---|---|---|
| Crawl4AI | 開源框架 | 免軟體費 | 開源,無授權費 | 仍要付伺服器 / proxy / 維護 / 你的時間,非真正 $0 |
| Jina Reader | 託管 AI API | $0 起 | 免費額度寬鬆 | 網址前加 r.jina.ai 即用 |
| Firecrawl Keyless | 託管 AI API | $0 | 1,000 credits/月・免註冊 | 超量自帶 key 轉訂閱 |
| Firecrawl Hobby | 託管 AI API | $16/月 | (付費起跳) | 年繳價・約 5,000 頁/月 |
| Zyte API | 商用 | $0.13/千次 | 試用額度 | 簡單 HTTP 請求・PAYG |
| Apify | 商用平台 | $29/月 | $5 試用 credit | compute-unit 計價 |
| ScrapingBee | 商用 | $49/月 | 1,000 次試用 | 訂閱制 |
| Bright Data | 商用・工業級 | ~$1.5/千次 | 試用 credit | 此價為 Web Unlocker PAYG;其他產品另計,另有 $499/月方案 |
LLM 時代的新物種:為什麼 Firecrawl 現在紅
傳統爬蟲抓回來是一坨 HTML,你得自己寫規則挑欄位、洗乾淨。但這兩年抓網頁多半是為了餵給 AI(問答、RAG 知識庫、agent)。於是冒出新工具:直接吐出 AI 能吃的乾淨 Markdown,省掉中間清洗。
傳統路線
抓回 HTML(一坨標籤) ↓ 你寫 selector 逐欄位挑出來 ↓ 自己洗雜訊 結構化 JSON ↓ 還要再轉成 AI 能讀的格式
LLM-ready 路線
給一個網址 ↓ 一次呼叫 回乾淨的 Markdown (廣告/選單/雜訊已去掉) ↓ 直接餵給 AI,零清洗
這個新類別的三個代表
| 工具 | 性質 | 強項 | 限制 |
|---|---|---|---|
| Firecrawl | 託管 API(也可自架)freemium | 能爬整站、和 LangChain / RAG 生態整合最好、功能最全 | 規模大要訂閱、強反爬站加價 |
| Jina Reader | 託管 API freemium | 最簡單:網址前加 r.jina.ai/ 就有結果,免 SDK | 只處理單頁,不自己爬整站 |
| Crawl4AI | 開源函式庫 免費 | 完全開源(Apache 2.0)、可本地跑、完全掌控 | 要自己寫 code、自己維運 |
互動定位地圖:你該從哪個工具起步?
把市場放進一張二維圖:橫軸=你願意花多少設定功夫(左:肯寫 code/右:要零設定),縱軸=你的規模與反爬需求(下:小量試用/上:工業級)。拉動下面兩條 slider,地圖上的「你」會移動,下方給出建議起點(不是排名,是「從這裡開始,撞牆了再升級」)。
調整你的條件
抓到了 ≠ 抓對了:資料可信嗎?
新手最常犯的錯,是只問「程式有沒有跑完」,不問「抓回來的資料對不對」。爬蟲最危險的不是當掉,是安靜地抓錯——它不報錯,但資料是壞的。常見的隱性失敗:
少抓了(漏行)
分頁沒翻完、動態內容沒載入 → 你以為抓了全部,其實只有第一頁。
重複了(重行)
沒去重,同一筆被抓很多次 → 統計全錯。
抓到舊的(過期)
抓到的是快取/舊版頁面,不是現況。
selector 抓錯欄
網站微調,價格欄變成了日期欄,數字照樣填進去——看起來很正常。
給你的實務地圖
你已經有一套 headless Chrome + CDP 的自動抓取流程(免費、全掌控、能帶登入狀態、不經過第三方)。所以問題不是「要不要換成 Firecrawl」,而是「哪些場景值得多用一個工具」。
| 你的場景 | 建議 | 為什麼 |
|---|---|---|
| 臨時抓一兩頁,要乾淨 Markdown 餵 AI | Firecrawl Keyless / Jina Reader | 零設定、30 秒搞定,免費額度綽綽有餘 |
| 抓需要登入的站(如 FB) | 你的 CDP 流程 | 託管工具過不了你的登入態;你已有更好的解 |
| 大量公開頁面 bulk(podcast、NCCN 等) | CDP / Crawl4AI 自架 | Keyless 1,000 頁 + 併發 2 撐不住這量級 |
| 要做 RAG 知識庫 | LLM-ready 工具皆可 | 輸出就是乾淨 Markdown,省掉清洗 |
| 工業級 + 強反爬電商站 | 付費(Bright Data / Zyte) | proxy + 反爬是它們的核心競爭力 |
| 掛進 Claude 當隨手工具 | Firecrawl Keyless(MCP) | 免 key,掛上去就能用,最低摩擦 |
先別急著爬:四個「該不該爬」的問題
先問這四題,多半不用爬
- 對方有官方 API 嗎?→ 用 API,穩定又合法
- 有現成資料集可下載嗎?(CSV / dump)
- 需要取得授權嗎?問一聲常常就給
- 其實手動複製十筆就夠了嗎?
三條紅線(你問的「要小心」)
- 合法性是你的責任:ToS / robots.txt / 著作權,工具不扛
- 資料會過第三方雲:Keyless 抓的內容經 Firecrawl 伺服器,絕不抓病人資料 / 帳密 / PHI
- 免費 ≠ 無限:1,000 頁/月、併發 2,是試用級
如果只記一件事
Firecrawl Keyless 是真貨、可放心試、適合隨手小量任務,但別把它當你 bulk pipeline 的取代品——那塊你的 CDP 流程仍然更強,也不用把資料交給第三方。最省事的驗證法:拿一個公開網頁丟它,看吐出來的 Markdown 品質,30 秒見真章。
詞彙表(看到不慌)
- HTML
- 網頁的原始碼,由一堆「標籤」組成。瀏覽器把它畫成你看到的畫面;爬蟲拿到的是這份原始碼。
- DOM
- 瀏覽器把 HTML 解析成的「節點樹」。程式沿著它定位「第幾個元素」。
- 靜態 vs 動態頁面
- 靜態=內容直接寫在 HTML。動態=要瀏覽器跑 JavaScript 才長出內容(無限捲動、即時載入)。
- Headless browser
- 沒有畫面的瀏覽器,由程式操控。用來把動態頁面真的「跑出來」再抓。Playwright / Puppeteer 是代表。
- Selector
- 定位規則,告訴程式「要抓哪個元素」。網站改版時最容易失效的就是它。
- Proxy / IP 輪替
- 代理伺服器。用不同 IP 發請求,讓網站不覺得是同一台機器在狂抓,避免被封。付費服務最大的成本來源。
- Rate limit
- 網站限制「同一來源每秒/每分能請求幾次」,超過就擋。抓太快會撞到。
- CAPTCHA
- 「我不是機器人」那種驗證。網站用來擋自動化流量的手段之一。
- robots.txt
- 網站根目錄的一個檔,宣告「哪些頁歡迎/不歡迎被機器人抓」。是慣例規範,不是技術強制。
- API key
- 呼叫付費服務的「鑰匙」,綁定帳號與計費。Keyless 的賣點就是「不用這個」。
- Credit / 額度
- 託管服務的計量單位,通常 1 credit ≈ 抓 1 頁;難抓的站(開隱身模式)一頁可能扣多個 credit。
- Markdown
- 輕量純文字格式(標題、粗體、清單)。乾淨、好讀、AI 最好消化——LLM-ready 工具的標準輸出。
- RAG
- Retrieval-Augmented Generation。先抓外部資料當「參考書」,再讓 AI 根據它回答。爬蟲常是 RAG 的第一步。
- CDP
- Chrome DevTools Protocol。直接用程式驅動真實 Chrome 的協定,能帶你的登入狀態,自動化程度高。