我剛開始打造自動化工具時,從沒想過自己會花這麼多時間鑽進網站內部,像個數位考古學家一樣研究它們的 HTML。不過到了 2026 年,網路依然是全世界最大、也最混亂的資料倉庫——只是現在有一半內容被 JavaScript、動態載入,以及愈來愈嚴格的機器人防護藏了起來。無論您是業務高手、電商經營者,還是單純對程式充滿好奇的開發者,網頁爬蟲都已經成了把公開網頁轉化為可行動商業價值的秘密配方。若您跟我一樣,大概也曾想過:「我真的只用 JavaScript 就能做出自己的網頁爬蟲嗎?」先破題:可以。但該不該做?那就讓我們一起看下去。
在這篇指南裡,我會帶您從零開始,做出屬於自己的 JavaScript 網頁爬蟲——涵蓋從靜態 HTML 解析,到處理動態、JavaScript 密集型網站的各種情境。因為我看過兩種做法的優缺點,我也會分享什麼時候該放下程式碼,改讓像 這樣的人工智慧工具幫您扛下最費工的部分。準備好動手了嗎?那我們開始吧。
什麼是使用 JavaScript 進行網頁爬蟲?
先從基礎說起。網頁爬蟲是自動從網站擷取資訊的過程。與其手動複製貼上資料(老實說,這件事大概跟看油漆乾掉一樣無聊),您可以寫一支程式——也就是「爬蟲」——去抓取網頁,並把您要的資料挑出來。
那 JavaScript 又扮演什麼角色呢?JavaScript 可以說是網頁的母語。它在瀏覽器裡執行,驅動互動式網站,而且因為有 Node.js,也能在您的筆電或伺服器上跑。當我們談到 使用 JavaScript 進行網頁爬蟲,通常指的是用 Node.js 撰寫腳本,來完成以下工作:
- 抓取網頁(透過 HTTP 請求)
- 解析 HTML,找出您要的資料
- 有時還需要自動操作真實瀏覽器,處理動態載入內容的網站
在這個情境下,網頁大致可分成兩類:
- 靜態頁面:資料直接寫在 HTML 裡。像簡單的商品列表頁就是。
- 動態頁面:資料要等頁面自己跑完 JavaScript 後才會出現,例如無限捲動的動態消息流,或是透過 AJAX 載入資料的儀表板。
JavaScript 搭配各種函式庫,兩種都能處理。靜態頁面可以直接抓 HTML 再解析;動態頁面則需要透過瀏覽器自動化,去「看到」真實使用者會看到的內容。
為什麼使用 JavaScript 進行網頁爬蟲對商業很重要
老實說:沒人會只是為了好玩去爬網站(好吧,也許週六晚上的我會)。企業會做爬蟲,是因為它能更快拿到洞察、名單,以及競爭優勢。重要原因如下:
- 節省時間:自動化爬蟲能在幾分鐘內收集成千上萬筆資料,和人工複製貼上相比,可替團隊省下數百小時()。
- 做出更好的決策:即時資料代表您能更快回應市場變化、調整價格,或在競爭對手之前先發現趨勢()。
- 更高準確度:自動擷取能減少人工錯誤,讓資料集更乾淨、更可靠()。
- 競爭洞察:追蹤競品價格、監測評論、分析市場趨勢——爬蟲能把公開網路變成您的私人研究實驗室。
- 開發潛在客戶:建立名單、補強 CRM 資料,或挖掘新的銷售機會——全都能自動完成。
下面這張表快速總結了商業影響:
| 使用情境 | 商業影響(範例) |
|---|---|
| 競爭對手價格追蹤 | 透過最佳化定價提升營收。John Lewis 在使用爬蟲監控競品價格後,銷售額提升了 4%。 |
| 市場擴張研究 | 依據特定市場制定策略,帶動成長。ASOS 善用擷取的在地市場資料,讓國際銷售額 翻倍。 |
| 流程自動化 | 大幅減少人工工作量。某個自動化爬蟲一週處理了 12,000 多筆資料,省下數百小時人力。 |
還有一個數字每次都讓我很驚訝:有 進行公開資料蒐集,而 。這可不是小眾嗜好,這是主流商業工具。
用 JavaScript 建立您的網頁爬蟲環境
好,來點實作。如果您想打造自己的爬蟲,首先得先把環境設好。我的做法如下:
-
安裝 Node.js(以及 npm)
前往 下載 LTS 版本。這會提供 Node.js(執行環境)和 npm(套件管理工具)。
-
檢查是否安裝成功:
1node -v 2npm -v
-
-
建立專案資料夾
為您的專案建立一個新目錄(例如
web-scraper-demo),打開終端機後執行:1npm init -y這會建立一個
package.json檔案,用來管理相依套件。 -
安裝必要函式庫
先準備這些入門工具:
- Axios:用來抓取網頁的 HTTP 用戶端
npm install axios - Cheerio:類似 jQuery 的 HTML 解析器
npm install cheerio - Puppeteer:無頭 Chrome 自動化工具(適用於動態網站)
npm install puppeteer - Playwright:多瀏覽器自動化工具(Chromium、Firefox、WebKit)
npm install playwright接著執行:
npx playwright install(下載瀏覽器二進位檔)
- Axios:用來抓取網頁的 HTTP 用戶端
以下是這些工具的快速比較:
| 函式庫 | 用途與優勢 | 使用情境範例 |
|---|---|---|
| Axios | 用於發送請求的 HTTP 用戶端。輕量。只適合靜態頁面。 | 取得新聞文章或商品頁面的原始 HTML。 |
| Cheerio | DOM 解析器,支援類似 jQuery 的選擇器。靜態內容處理速度快。 | 從靜態 HTML 擷取所有 標題或連結。 |
| Puppeteer | 無頭 Chrome 自動化。可執行頁面 JS,也能自動點擊、截圖。 | 爬取現代網頁應用、需要登入的網站。 |
| Playwright | 多瀏覽器自動化,具備自動等待功能,適合複雜情境。 | 跨 Chrome、Firefox、Safari 引擎爬取網站。 |
如果是靜態頁面,Axios + Cheerio 幾乎就是首選。若是任何動態或互動式頁面,Puppeteer 或 Playwright 會更合適()。
使用 JavaScript 建立簡單的網頁爬蟲
讓我們捲起袖子做一個基本爬蟲。假設您想從像 “Books to Scrape” 這樣的靜態網站抓取書名和價格(這是很棒的學習沙盒)。
步驟 1: 在瀏覽器裡檢視頁面。您會看到每本書都包在 <article class="product_pod"> 裡,標題在 <h3>,價格在 <p class="price_color">。
步驟 2: 程式碼如下:
1const axios = require('axios');
2const cheerio = require('cheerio');
3(async function scrapeBooks() {
4 try {
5 // 1. 取得頁面 HTML
6 const { data: html } = await axios.get('http://books.toscrape.com/');
7 // 2. 將 HTML 載入 Cheerio
8 const $ = cheerio.load(html);
9 // 3. 選取並擷取所需資料
10 const books = [];
11 $('.product_pod').each((_, element) => {
12 const title = $(element).find('h3 a').attr('title');
13 const price = $(element).find('.price_color').text();
14 books.push({ title, price });
15 });
16 // 4. 輸出結果
17 console.log(books);
18 } catch (error) {
19 console.error('爬取失敗:', error);
20 }
21})();
這段程式在做什麼?
- 抓取:使用 Axios 取得 HTML。
- 解析:Cheerio 讀入 HTML,讓您可以使用 CSS 選擇器。
- 擷取:針對每個
.product_pod,抓取標題與價格。 - 輸出:列印書籍物件陣列。
選擇器小技巧:
使用瀏覽器的開發者工具(右鍵 → 檢查)找出獨特的 class 或標籤。Cheerio 支援大多數 CSS 選擇器,因此您可以精準定位元素。
解析與擷取資料
分享幾個我從爬蟲實戰中學到的技巧:
- 文字 vs. 屬性:
.text()用於內文,.attr('attributeName')用於屬性(例如title或href)。 - 資料型別:在擷取時就先清理資料。移除貨幣符號、解析數字、格式化日期。
- 缺漏資料:擷取前一定先確認元素是否存在,避免發生錯誤。
- 映射處理:使用
.each()或.map()迴圈遍歷元素並建立結果陣列。
拿到資料後,您可以把它寫成 CSV、JSON,甚至資料庫。這世界任您選擇(或至少任您選擇試算表)。
使用 JavaScript 爬取動態網站:Puppeteer 與 Playwright
接下來,來處理最難的部分:動態網站。這類頁面必須等網站自己的 JavaScript 執行完,資料才會出現。像社群動態、儀表板,或有「載入更多」按鈕的網站,都是典型例子。
為什麼要用無頭瀏覽器?
單純的 HTTP 請求是不夠的——您只會拿到骨架 HTML。像 Puppeteer 和 Playwright 這類無頭瀏覽器,可以讓您:
- 啟動真實瀏覽器(沒有圖形介面)
- 執行網站的 JavaScript
- 等待內容載入完成
- 擷取已渲染的資料
Puppeteer 範例:
1const puppeteer = require('puppeteer');
2(async function scrapeQuotes() {
3 const browser = await puppeteer.launch({ headless: true });
4 const page = await browser.newPage();
5 await page.goto('https://quotes.toscrape.com/js/', { waitUntil: 'networkidle0' });
6 await page.waitForSelector('.quote'); // 等待名言出現
7 const quotesData = await page.$$eval('.quote', quoteElements => {
8 return quoteElements.map(q => {
9 const text = q.querySelector('.text')?.innerText;
10 const author = q.querySelector('.author')?.innerText;
11 return { text, author };
12 });
13 });
14 console.log(quotesData);
15 await browser.close();
16})();
這段在做什麼?
- 啟動無頭 Chrome
- 前往頁面並等待網路活動穩定
- 等待
.quote選擇器出現 - 從 DOM 擷取名言與作者
Playwright 幾乎是同樣的流程,但支援多種瀏覽器(Chromium、Firefox、WebKit)並有一些方便的自動等待功能()。
如何選擇:Puppeteer 還是 Playwright?
Puppeteer 與 Playwright 都非常適合動態爬取,但我會這樣思考選擇:
- Puppeteer:
- 主要支援 Chrome/Chromium(另有部分 Firefox 支援)
- 對於基於 Chrome 的爬取,簡單、即裝即用
- 社群龐大,外掛很多(例如 stealth mode)
- Playwright:
- 多瀏覽器(Chromium、Firefox、WebKit/Safari)
- 官方支援多種語言(JS、Python、.NET、Java)
- 元素自動等待,輕鬆處理多分頁/多情境
- 很適合複雜或跨瀏覽器的情境
如果您只需要爬一個網站,而且 Chrome 就夠用,Puppeteer 會很快也很簡單。若您需要跨瀏覽器覆蓋、自動等待,或是要把爬蟲接進 AI agent 裡(Playwright 現在已推出官方 MCP 伺服器,因此 agent 可以直接驅動它),那麼對於 2026 的新專案來說,Playwright 會是更穩妥的預設選擇()。
使用 JavaScript 進行網頁爬蟲時,如何克服常見挑戰
真正有趣的部分從這裡開始了(所謂有趣,就是「為什麼我的爬蟲在凌晨兩點突然壞掉」)。網頁爬蟲不只是寫程式而已,而是要一路跨過各種障礙:
- IP 封鎖與速率限制:同一個 IP 發出太多請求?就會被擋。請使用代理伺服器並輪替使用()。
- CAPTCHA 與機器人偵測:網站會使用 CAPTCHA、指紋辨識與誘捕陷阱。您可以放慢請求速度、使用 stealth 外掛,或第三方 CAPTCHA 解題服務。
- 動態內容與 AJAX:有時您可以不必開瀏覽器,而是直接呼叫網站後端 API(如果您能從網路紀錄裡找到它)。
- 頁面結構變動:網站的 HTML 會不斷更新。請讓選擇器保持模組化,並準備好隨時調整。
- 效能瓶頸:如果要爬數千個頁面,請使用並行處理,但不要把自己的機器(或目標網站)壓垮。
最佳實務:
- 控制請求頻率(加入延遲)
- 設定合理的 user-agent 標頭
- 大規模爬取時使用代理伺服器
- 全部都記錄下來(這樣才知道何時、為何出問題)
- 尊重 robots.txt 與服務條款
也別忘了:爬蟲是一個持續變動的目標。網站會演進,反機器人技術也會越來越聰明,因此您得持續更新腳本()。
疑難排解與維護技巧
- 將選擇器模組化:把 CSS 選擇器集中放在一起,方便日後更新。
- 描述性日誌:記錄進度與錯誤,才能快速發現問題。
- 用可視模式除錯:以有圖形介面的方式執行瀏覽器自動化,直接看發生了什麼。
- 錯誤處理:使用 try/catch 與重試機制提升穩定性。
- 定期測試:如果爬蟲突然回傳零結果,就設定警示。
- 版本控制:使用 Git 追蹤變更,必要時可回復。
即使做到這些,維護數十個客製化爬蟲仍然會變成一項大工程。這也是越來越多團隊開始評估 AI 驅動、免寫程式方案的原因。
什麼時候該考慮免寫程式替代方案:Thunderbit 與 JavaScript 爬蟲的比較
老實說,不是每個人都想把週末拿來除錯選擇器或跟代理伺服器搏鬥。這時候就輪到 登場了——我們的 AI 網頁爬蟲 Chrome 擴充功能。
Thunderbit 如何運作?
- 安裝 Chrome 擴充功能
- 前往任一頁面,點選「AI 建議欄位」
- Thunderbit 的 AI 會讀取頁面、建議欄位,並擷取資料
- 支援動態頁面、子頁面、文件、PDF 等更多內容
- 可直接匯出到 Google 試算表、Airtable、Notion 或 CSV——完全不用寫程式
以下是並排比較:
| 面向 | JavaScript 爬蟲(自己寫程式) | Thunderbit(免寫程式 AI 工具) |
|---|---|---|
| 設定時間 | 每個爬蟲都要花數小時(編寫、除錯、環境設定) | 每個網站只要幾分鐘——安裝擴充功能、點一點就能開始 |
| 學習曲線 | 需要 JS/Node、HTML/CSS、爬蟲函式庫與除錯能力 | 不需要寫程式,點選式介面,AI 幫您引導 |
| 維護成本 | 網站一改版就得修腳本(持續的工程工作) | AI 可適應版面變化,使用者幾乎不用維護 |
| 協作/分享 | 只能分享程式碼或 CSV,非工程人員可能不好使用 | 可匯出到 Google 試算表、Airtable、Notion,團隊分享更容易 |
Thunderbit 的 AI 甚至可以在爬取時直接摘要、分類或翻譯資料——這些功能若自己寫,往往得多寫不少程式()。

真實情境:哪種做法更適合您的團隊?
-
情境 1:開發者、複雜專案
您正在打造一個產品,要從五個不同網站彙整職缺,還需要自訂邏輯,並部署在自己的伺服器上。自己寫爬蟲很合理——您能完全掌控,可針對規模最佳化,也能直接與後端整合。
-
情境 2:商務團隊、急需資料
您是行銷經理,今天就需要從幾個名錄網站整理潛在客戶名單。沒有寫程式能力,也沒時間走開發流程。Thunderbit 就非常適合:點一點、匯出到 Google 試算表,幾小時內就搞定()。
-
情境 3:混合式做法
有時團隊會先用 Thunderbit 做原型或處理快速任務,之後如果變成長期需求,再投資客製化程式。或者由工程師先建立初版爬蟲,再透過 Thunderbit 範本把後續爬取工作交給非工程人員。
該怎麼選?
- 若您需要高度自訂、具備技術能力,或想完全掌控流程——就自己寫程式。
- 若您想要速度、簡單、以及團隊協作——Thunderbit 很難被超越。
- 很多團隊兩者並用:核心系統用程式寫,臨時或業務驅動型爬取交給 Thunderbit。
第三條路:AI 程式代理與瀏覽器代理
這裡其實有一條過去多數 JavaScript 爬蟲教學沒提過的中間路線。值得認識兩種形式:
- AI 程式代理(Claude Code、OpenAI Codex CLI、Cursor)——您用白話描述頁面與想要的資料,它們會幫您寫出 Axios/Cheerio/Playwright 腳本。程式還是歸您管,反機器人限制也還是要自己處理,但「撰寫」這件事會從數小時縮短到幾分鐘。當您想把真正的腳本放在 repo 裡,而不是把資料交給黑盒工具時,這很有用。
- 瀏覽器驅動代理(Browser Use、Playwright MCP、Skyvern)——代理不只是產生腳本,而是直接操作瀏覽器。您輸入像「登入、到訂單頁、匯出最近 30 天 CSV」這樣的提示,它就會自己判斷要點哪些地方。這對登入流程、多步驟導航、或版面常變動的頁面特別有用,因為代理會根據看到的內容推理,而不是依賴固定選擇器。
這兩種方式都無法消除那些惱人的限制——速率限制、服務條款、CAPTCHA、IP 封鎖,這些問題還是存在。不過如果是「我只需要一次這份資料」或「選擇器一直壞掉」的情境,在您決定再維護另一支 puppeteer.launch() 腳本之前,值得先看看它們。
如果您想完全跳過代理層,直接點選操作,那就是 Thunderbit 的用武之地——可以參考上面的比較。
資料匯出、自動化與協作:超越基礎爬取
收集資料只是開始。接下來怎麼利用,才是關鍵。
使用 JavaScript 爬蟲時:
- 使用 Node 的
fs模組將資料寫入 CSV/JSON - 匯入資料庫,或呼叫 API(例如 Google 試算表 API)
- 用 cron jobs 或雲端函式排程
- 分享時通常得傳檔案,或自己建儀表板
使用 Thunderbit 時:
- 一鍵匯出到 Google 試算表、Airtable、Notion 或 CSV()
- 內建排程——設定一次就能自動更新資料
- 團隊成員可共用範本,結果能立即協作
- 內建 AI 後處理(摘要、分類、翻譯)
想像一下,您每天爬一次競品價格,而 Google 試算表每天早上自動更新——不用寫程式,也不用手動操作。這就是 Thunderbit 能提供的工作流程。
重點整理:使用 JavaScript 進行網頁爬蟲,如何為商業成功加分
最後幫您整理幾個最重要的收穫:
- JavaScript 是強大的爬蟲工具:搭配 Node.js、Axios、Cheerio、Puppeteer 與 Playwright,幾乎可以爬取任何網站()。
- 商業價值才是目標:爬蟲的核心是更好的決策、更快的流程,以及競爭優勢()。
- 選對方法很重要:靜態頁面用輕量工具,動態頁面用無頭瀏覽器。
- 要預想挑戰:IP 封鎖、CAPTCHA、網站改版都是常態——請用代理、隱匿技巧,並保持程式模組化。
- 維護是現實:要準備好更新腳本,或考慮可自動適應的 AI 工具()。
- 像 Thunderbit 這類免寫程式工具能加速成果:對非工程人員或需要快速交付的商務需求來說,Thunderbit 的 AI、子頁面爬取與一鍵匯出,能讓每個人都更容易上手。
- 整合與協作很重要:確認資料能流向團隊正在使用的工具——Google 試算表、Airtable、Notion,或您的 CRM。
最後想法:
網路上充滿資料——只要您知道怎麼抓,就已經比別人快一步。不論您是自己用 JavaScript 寫爬蟲,還是讓 Thunderbit 的 AI 幫您處理最費力的工作,關鍵都在於把原始資料轉化成商業價值。兩種方式都試試看,找出最適合您工作流程的那一個,並記住:最好的爬蟲,就是能在您需要的時候,給您需要答案的那一個。
想試試 Thunderbit 嗎? ,看看網頁爬蟲可以多簡單。想進一步探索嗎?歡迎前往 閱讀更多指南、技巧,以及來自資料自動化前線的故事。
常見問題
1. 什麼是 JavaScript 網頁爬蟲?它如何運作?
JavaScript 網頁爬蟲是使用 Node.js、Axios、Cheerio、Puppeteer 或 Playwright 等工具,以程式方式從網站抓取並擷取資料。靜態頁面可以透過 HTTP 請求與 HTML 解析器來爬取;動態頁面則需要無頭瀏覽器模擬真實使用者互動。
2. 為什麼企業應該重視使用 JavaScript 進行網頁爬蟲?
網頁爬蟲能幫助企業節省時間、減少人工投入、提升資料準確性,並取得即時的競爭洞察。它支援像是開發潛在客戶、價格追蹤、市場研究與銷售自動化等應用,是資料驅動決策的實用工具。
3. JavaScript 爬蟲常用的主要工具與函式庫有哪些?
- Axios:用於靜態頁面的 HTTP 請求。
- Cheerio:用來解析與查詢靜態 HTML。
- Puppeteer:用於自動化 Chrome 並擷取動態內容。
- Playwright:支援多瀏覽器自動化,具備強大的爬取能力。
4. 什麼時候該用 Thunderbit,而不是自己用 JavaScript 建爬蟲?
當您想要快速、免寫程式的爬取,不想撰寫或維護腳本時,就該用 Thunderbit。它非常適合商務團隊、快速專案與協作工作流程。Thunderbit 可處理動態內容、子頁面,並直接匯出到 Google 試算表與 Airtable 等工具。
5. JavaScript 網頁爬蟲最大的挑戰有哪些?該如何克服?
常見挑戰包括 IP 封鎖、CAPTCHA、頁面結構變動,以及效能限制。您可以透過代理伺服器、stealth 外掛、瀏覽器自動化、模組化程式碼與重試邏輯來降低風險。或者,也可以使用 Thunderbit 這類工具,自動化地避開許多障礙。
6. 那像 Claude Code 這類 AI 程式代理,或像 Browser Use 這類瀏覽器代理呢?它們會取代 JavaScript 爬蟲嗎?
不會完全取代,但它們會改變工作流程。AI 程式代理(Claude Code、Codex CLI、Cursor)可以根據白話描述,幫您產生 Axios/Cheerio/Playwright 腳本——程式仍由您執行,反機器人機制與速率限制也還是要自己處理。瀏覽器代理(Browser Use、Playwright MCP)則更進一步,會透過自然語言指令直接操作瀏覽器,這對登入受限或多步驟流程特別方便,尤其是選擇器常常失效的時候。若是一次性任務,它們確實能省下不少時間;但若是正式上線的爬取工作,您還是需要自己的腳本(或像 Thunderbit 這類受管理的工具),才能在變動發生時順利除錯。
