還記得我第一次用 JavaScript 想要抓網站上的銷售名單,心裡還很自信地想:「我會寫 JavaScript,這應該很簡單吧?」結果沒過多久,我就被選擇器搞得頭昏腦脹,動態內容一會兒就不見了,還有各種反爬蟲機制讓我抓狂。後來才發現,這種狀況根本不是我一個人的問題—— 都認為數據對業務越來越重要,而網頁爬蟲正是這波潮流的核心。但隨著網站越來越複雜,單靠 JavaScript 來抓資料,既是利器也是一場硬仗。
這篇教學會帶你從入門到進階,手把手認識怎麼用 JavaScript 網頁爬蟲,還會介紹像 這種 AI 工具,怎麼幫你解決選擇器地獄。不管你是要幫電商團隊整理商品清單,還是幫業務找潛在客戶,現在就來看看怎麼用 JavaScript(再加點 AI 助攻)高效抓網頁資料。
用 JavaScript 網頁爬蟲:基礎觀念與限制
先來聊聊基本概念:JavaScript 網頁爬蟲,就是用程式自動化地從網站抓資料,可以直接在瀏覽器跑腳本,也能用 Node.js 在後端執行。JavaScript 本來就是網頁的語言,當然成為爬蟲首選,尤其有像 Cheerio(靜態 HTML 解析)、Puppeteer 和 Playwright(無頭瀏覽器自動化)這些超強函式庫。
為什麼大家都愛用 JavaScript?
- 直接操控 DOM: 在瀏覽器裡就像真人一樣操作網頁元素。
- 生態圈超豐富: Node.js 有一堆 HTTP 請求、解析、自動化相關函式庫。
- 彈性超高: 登入、點擊、滾動……只要瀏覽器能做的,幾乎都能自動化。
但問題來了:現代網站變化超快,內容常常用 JavaScript 動態載入,DOM 結構也隨時在變,還有各種反爬蟲機制。你的爬蟲腳本今天能用,明天可能就掛了。你會一直修選擇器、處理彈窗、追著非同步資料跑,根本像在玩打地鼠,只是多了很多大括號。
為什麼複雜網頁讓 JavaScript 爬蟲更頭痛?
以前抓資料只要下載 HTML 解析就好,但現在的網站早就不一樣了。像 Facebook Marketplace、Amazon,甚至本地房仲網站,都用 JavaScript 框架動態渲染內容,資料藏在無限滾動、彈窗、或超複雜的 DOM 裡。
傳統 HTML 解析已經不夠力了。舉例來說,想抓商品評論或巢狀留言,不只是找到 <div>
這麼簡單,還要理解元素之間的關聯、欄位的意義,甚至資料背後的語意。
這時候就需要更聰明的前處理。與其盲目抓 HTML,不如用能「語意理解」網頁的方式:什麼是商品名稱、什麼是價格、什麼是用戶評論?這對純 JavaScript 來說很難,但 AI 工具剛好能補這一塊。
傳統 JavaScript 網頁爬蟲工具怎麼選?
來聊聊常見工具。經典的 JavaScript 網頁爬蟲組合通常有:
- Cheerio: 適合解析靜態 HTML,像伺服器端的 jQuery。
- Puppeteer/Playwright: 無頭瀏覽器自動化,能啟動真實瀏覽器、執行 JavaScript,模擬人類互動(或像打了雞血的機器人)。
典型流程大致如下:
- 請求網頁(可以用無頭瀏覽器或直接請求)。
- 等待內容載入(常用
waitForSelector
等方法)。 - 解析 DOM,找出你要的資料。
- 擷取並結構化 結果。
看起來很簡單對吧?但現實是:網站只要一改版,選擇器就失效;多個彈窗,腳本就卡住;欄位順序一變,資料就亂掉。維護變成永無止境的苦差事。
主流 JavaScript 爬蟲函式庫比較
功能 | Cheerio | Puppeteer | Playwright |
---|---|---|---|
適用對象 | 靜態 HTML | 動態頁面 | 動態頁面 |
瀏覽器自動化 | 否 | 是 | 是 |
支援 JS 內容 | 否 | 是 | 是 |
速度 | 快 | 較慢 | 較慢 |
API 易用性 | 簡單 | 中等 | 中等 |
反爬蟲能力 | 有限 | 中等 | 中等 |
跨瀏覽器 | 否 | 僅 Chrome | Chrome、Firefox、WebKit |
常見應用 | 簡單網站、API | 互動式網站 | 互動式網站 |
Cheerio 適合靜態頁面或回傳 HTML 的 API,速度快但無法執行 JavaScript。Puppeteer 和 Playwright 則適合動態頁面,但比較重、設定也多。兩者都能自動化登入、點擊、滾動,但只要網站有新花樣,還是得自己寫邏輯處理。
Thunderbit 登場:專為 JavaScript 流程設計的 AI 網頁爬蟲
這裡就是分水嶺。Thunderbit 團隊發現,爬蟲不只是抓 HTML,更要像人一樣「理解」網頁。所以我們打造了 ,一款 人工智慧網頁爬蟲 Chrome 擴充功能,讓爬蟲具備語意理解能力。
它怎麼運作?
- Thunderbit 會把網頁轉成 Markdown 結構,讓內容更乾淨、層次分明。
- 接著,AI 會分析這份 Markdown,辨識欄位、關聯與語境——知道什麼是價格、什麼是評論、什麼只是裝飾用的 emoji。
- 最後,你拿到的是結構化、標註清楚的資料,不怕版面變動、動態內容或 DOM 結構調整。
對商業用戶來說,這代表更少手動清理、更少腳本壞掉、更多時間專注在數據洞察。對開發者來說,則能專心自動化瀏覽(登入、點擊、滾動),把繁瑣的資料擷取交給 Thunderbit。
實作教學:用 JavaScript 傳統方法 vs. Thunderbit 網頁爬蟲
來實戰一下!以抓取電商網站商品清單為例,先用 Puppeteer 傳統做法,再示範怎麼用 Thunderbit 讓流程更聰明。
步驟一:建立 JavaScript 爬蟲環境
首先,你需要安裝 。安裝好後,執行以下指令安裝 Puppeteer:
1npm install puppeteer
如果想支援更多瀏覽器,也可以選 Playwright:
1npm install playwright
不熟程式也沒關係,直接複製貼上範例程式碼,下面會逐步說明每一段的作用。
步驟二:自動化瀏覽與互動動態頁面
現代網站常把資料藏在登入、彈窗、無限滾動後面。以下用 Puppeteer 自動化這些步驟:
1const puppeteer = require('puppeteer');
2(async () => {
3 const browser = await puppeteer.launch({ headless: true });
4 const page = await browser.newPage();
5 // 前往登入頁
6 await page.goto('https://example.com/login');
7 await page.type('#username', 'your_username');
8 await page.type('#password', 'your_password');
9 await page.click('#login-button');
10 await page.waitForNavigation();
11 // 前往商品列表
12 await page.goto('https://example.com/products');
13 // 滾動載入更多商品
14 await page.evaluate(async () => {
15 for (let i = 0; i < 5; i++) {
16 window.scrollBy(0, window.innerHeight);
17 await new Promise(resolve => setTimeout(resolve, 1000));
18 }
19 });
20 // 等待商品載入
21 await page.waitForSelector('.product-card');
22 // ...(下一步擷取資料)
23})();
這段腳本會自動登入、進入商品頁、滾動載入更多內容。重點是要等元素出現,不然只會抓到空白。
步驟三:用 JavaScript 擷取資料
假設每個商品都在 .product-card
區塊裡,擷取方式如下:
1const products = await page.$$eval('.product-card', cards =>
2 cards.map(card => ({
3 name: card.querySelector('.product-title').innerText,
4 price: card.querySelector('.product-price').innerText,
5 link: card.querySelector('a').href,
6 }))
7);
8console.log(products);
常見陷阱:
- 選擇器容易失效。 網站只要把
.product-title
改成.title
,腳本就壞了。 - 資料隱藏。 價格或評論常常是 AJAX 載入,初始頁面沒有。
- 反爬蟲。 請求太頻繁容易被封鎖。
步驟四:用 Thunderbit AI 強化資料擷取
這時候就輪到 Thunderbit 上場了。你不用再和選擇器搏鬥,只要把渲染後的 HTML(甚至螢幕截圖)交給 Thunderbit,AI 就能自動擷取資料。
實際流程如下:
- 用 Puppeteer 或 Playwright 自動化瀏覽、登入、導航。
- 到達目標頁面後,取得 HTML:
1const pageContent = await page.content();
- 將這份 HTML 透過 傳給 Thunderbit 進行 AI 擷取。
Thunderbit 會:
- 把網頁轉成 Markdown,方便語意解析。
- 用 AI 辨識欄位、關聯與語境。
- 輸出結構化資料,可直接匯出到 Excel、Google Sheets、Airtable 或 Notion。
再也不用追著選擇器跑,也不用手動清理雜亂資料。
處理動態內容與非同步載入
動態內容是每個爬蟲的惡夢。網站常在初始渲染後才載入資料,例如無限滾動、「載入更多」按鈕、或 AJAX 載入評論。
傳統做法:
- 用
waitForSelector
等待元素出現。 - 等待「網路閒置」(沒有新請求)再抓資料。
- 手動觸發滾動或點擊載入更多。
但這些方法很脆弱,網站只要改載入邏輯,腳本就壞了。
Thunderbit 的解法: 透過把網頁轉成 Markdown,讓 AI 分析結構,不再依賴特定 DOM 層級或 ID。只要內容還在,Thunderbit 的 AI 通常都能找到並擷取,大幅減少維護成本,資料更穩定可靠。
打造可持續的資料管道:從腳本到商業洞察
爬蟲不是一次性的任務,而是資料管道的起點。我的建議流程如下:
- 用 JavaScript(Puppeteer/Playwright)自動化瀏覽與擷取。
- 交給 Thunderbit 進行 AI 結構化與標註。
- 將結果匯出 到你常用的工具:Excel、Google Sheets、Airtable、Notion。
- 用 Thunderbit 的 定期自動執行——只要描述排程(像「每週一上午 9 點」)、輸入網址,其餘交給 Thunderbit。
- 資料回流業務流程——不管是業務開發、價格監控還是市場調查。
這種組合——JavaScript 負責自動化,Thunderbit 負責 AI 擷取——讓你打造可重複、低維護的資料管道,確保企業隨時掌握最新、精準的數據。
結論:怎麼選最適合你的網頁爬蟲方式?
那麼,用 JavaScript 抓網頁資料,最佳做法是什麼?我的建議:
- 傳統 JavaScript 爬蟲(Cheerio、Puppeteer、Playwright)適合簡單、靜態網站,或需要完全掌控自動化流程時。但維護成本高——選擇器易壞、版面常變、反爬蟲越來越嚴格。
- Thunderbit AI 擷取 則多了一層語意理解,對版面變動更有彈性,減少手動清理,讓你專注於數據洞察,而不是修腳本。
什麼時候該用哪一種?
- 快速抓取簡單頁面,用 Cheerio 或 Puppeteer 就夠。
- 複雜、動態網站,或想讓流程更穩定,建議結合 JavaScript 腳本與 Thunderbit AI 擷取。
- 不想寫程式的商業用戶,Thunderbit Chrome 擴充功能是最快速的「兩步到 Excel」解決方案。
想看更多範例?歡迎參考 ,有 、 等實戰分享。
加碼:網頁爬蟲合規與尊重網站的建議
在你大展身手前,給你幾個過來人的小提醒(畢竟我也收過不少網站管理員的「溫馨提醒」):
- 遵守 robots.txt 與網站服務條款。 不是每個網站都歡迎被爬。
- 控制請求頻率。 不要狂轟伺服器,適當間隔避免被封鎖(甚至黑名單)。
- 標明你的爬蟲身份。 設定自訂 User-Agent,讓站方知道你是誰。
- 避免抓取敏感或個資。 只抓公開資訊,尊重隱私。
- 隨時關注法律與最佳實踐。 不同地區對網頁爬蟲的規範不一。
記住:能力越大,責任越大(偶爾還會收到律師函)。
用 JavaScript 網頁爬蟲,其實是技術與藝術的結合。有了對的工具,再加上 AI 助力,你就能把網路變成自己的結構化資料寶庫。如果哪天卡關了,歡迎來找我(我大概正在一邊 debug 選擇器,一邊喝咖啡、開著 Thunderbit)。
祝你爬蟲順利!
常見問題
1. 什麼是 JavaScript 網頁爬蟲?為什麼這麼受歡迎?
JavaScript 網頁爬蟲,就是透過瀏覽器腳本或 Node.js 後端程式,自動化擷取網站資料。它受歡迎的原因在於能直接操作 DOM,擁有豐富的 HTTP 請求與自動化函式庫,還能靈活模擬登入、點擊、滾動等互動。
2. 抓取現代動態網站的主要挑戰有哪些?
現代網站多用 JavaScript 框架動態載入內容,資料常藏在無限滾動或彈窗後,且版面經常變動。這讓傳統爬蟲方法很脆弱,選擇器一變或資料非同步載入,腳本就容易失效。
3. Cheerio、Puppeteer、Playwright 這些傳統 JavaScript 爬蟲工具有何差異?
- Cheerio 適合靜態 HTML,速度快,但無法處理 JavaScript 動態內容或瀏覽器自動化。
- Puppeteer 和 Playwright 適合動態頁面,支援瀏覽器自動化與 JS 內容,但速度較慢、設定較多。Playwright 支援多瀏覽器,Puppeteer 主要針對 Chrome。
4. Thunderbit 相較傳統爬蟲有什麼優勢?
Thunderbit 利用 AI 將網頁轉成結構化 Markdown,再自動擷取標註欄位。這種方式對版面變動更有彈性,減少手動清理與維護負擔,遠勝傳統選擇器式爬蟲。
5. 網頁爬蟲有哪些合規與尊重網站的最佳實踐?
- 一定要檢查並遵守網站的 robots.txt 與服務條款。
- 控制請求頻率,避免造成伺服器負擔。
- 設定自訂 User-Agent 標明身份。
- 避免抓取敏感或個資,只取公開資訊。
- 隨時關注法律規範與最佳實踐。
延伸閱讀: