n8n 爬蟲實戰|自動擷取熱銷書榜資料、整理成結構化報表完整教學
更新於 2026年2月11日
📥 工作流 JSON 下載:GitHub 範例庫 | 💬 社群討論:Skool 雲端方程式 Cloud F1
專業導讀:n8n 爬蟲實戰——自動擷取熱銷書榜
💡 本文重點: 用 n8n 打造完整的網頁爬蟲工作流,自動擷取熱銷書排行榜資料(書名、作者、排名、價格),透過 CSS Selector 解析 HTML,整理成結構化 Google Sheets 報表,並設定每日排程自動更新。不用寫任何程式碼。
你將學到
- ✅ 用 HTTP Request 節點擷取網頁 HTML 內容
- ✅ 用 HTML Extract 節點搭配 CSS Selector 精準定位資料
- ✅ 用 Set 節點整理欄位格式、清洗資料
- ✅ 將結構化資料自動寫入 Google Sheets
- ✅ 設定 Schedule Trigger 每日自動更新
- ✅ 合規爬蟲的注意事項與 robots.txt 遵守原則
🎯 什麼是 n8n 網頁爬蟲?
n8n 網頁爬蟲是透過 HTTP Request 節點取得網頁 HTML 內容,再用 HTML Extract 節點搭配 CSS Selector 擷取目標資料,最終整理成結構化格式存入 Google Sheets 或資料庫的自動化工作流。 整個過程不需要寫 Python、不需要裝 Selenium,全部用 n8n 的拖拉式介面就能完成。
你有沒有遇過這種情況?你想追蹤某個書榜的排名變化,每天手動去網站看一次、截圖一次、記錄一次。做了兩天就放棄了,因為實在太無聊又太花時間。
我自己做內容行銷的時候就遇過這個問題。我需要追蹤技術書籍的銷售排名,看哪些主題正在上升,做為選題參考。手動追蹤根本不現實——我需要每天看 3 個書榜、記錄 30+ 本書的排名變化。後來用 n8n 建了一個爬蟲工作流,每天早上 7 點自動跑,資料直接寫進 Google Sheets,我只需要每週看一次趨勢圖就好。
大家可以想想看,這個爬蟲工作流除了書榜,還能用在哪些場景:
- 電商比價:追蹤競品的定價變化
- 新聞監測:自動擷取特定媒體的頭條新聞
- 招聘資訊:追蹤特定職缺的薪資範圍
- 房價追蹤:定期擷取房仲網站的成交價格
- SEO 監控:追蹤競爭對手的關鍵字排名頁面
💡 為什麼用 n8n 做爬蟲而不是寫 Python?
很多人第一反應是:「爬蟲不是應該用 Python 的 BeautifulSoup 或 Scrapy 嗎?」
沒錯,Python 的爬蟲生態確實更成熟。但問題是——不是每個人都會寫 Python。而且寫完之後還要處理排程、錯誤處理、結果存儲、通知這些周邊需求。用 n8n,這些全部都是拖拉一個節點就搞定的事情。
n8n 爬蟲的三大優勢
- 零程式碼:CSS Selector 是學一次就會的技能,比寫 Python 簡單 10 倍
- 內建排程:Schedule Trigger 直接設定每天跑,不需要寫 cron job
- 完整生態:擷取完直接寫 Google Sheets、發 LINE 通知、存資料庫,一條龍搞定
我的觀察:n8n 爬蟲不是要取代 Python,而是降低門檻。你不需要花兩週學 Python 才能追蹤一個書榜。對 80% 的爬蟲需求(靜態網頁、表格資料、排行榜),n8n 完全夠用。
💡 Alex 的觀察:n8n 在資料收集生態中的定位
這邊我要分享一個比較宏觀的觀察。
資料收集(Data Collection)這件事,很多人直覺想到「爬蟲」,但其實有很多不同的方法。關鍵是選對工具做對事:
| 資料來源類型 | 最佳工具 | 原因 |
|---|---|---|
| 有 API 的服務 | n8n HTTP Request + Auth | 最穩定、最合規 |
| 靜態網頁表格 | n8n HTML Extract | 簡單直覺、免程式碼 |
| JavaScript 渲染頁面 | Puppeteer / Playwright | 需要執行 JS 才能拿到資料 |
| 大量頁面(萬頁以上) | Scrapy / Apify | 分散式爬取、效能優先 |
| 需要登入的頁面 | Playwright + Cookie | 模擬瀏覽器行為 |
我的觀察是:80% 的人需要的「爬蟲」其實不需要真正的爬蟲框架。一個 HTTP Request + HTML Extract 就能搞定。只有當你需要爬取上萬頁、或是面對 JavaScript 重度渲染的 SPA 網站時,才需要搬出 Python 或 Apify。
這也是 n8n 的核心理念——用最簡單的方式解決 80% 的問題。
另外要特別提醒的是合規性問題。爬蟲本身不違法,但不尊重網站規則可能會有問題:
- 遵守
robots.txt的限制 - 控制爬取頻率(不要對伺服器造成負擔)
- 不要爬取個人隱私資料
- 確認網站的 Terms of Service
第一次沒做好或是聽不懂,代表你是正常人!爬蟲聽起來很技術,但 n8n 把它變得很直覺。
🔧 實戰教學:6 步驟打造熱銷書榜爬蟲工作流
接下來進入實作環節。這個工作流的完整流程是:
Schedule Trigger → HTTP Request 擷取 HTML → HTML Extract 解析資料 → Set 整理欄位 → Google Sheets 儲存 → LINE/Email 通知
前置準備
- n8n 環境:本機或雲端皆可(參考 n8n 零基礎教學)
- 目標網站 URL:以博客來暢銷書排行榜為例
- Google Sheets:用來存放擷取結果
- Chrome 瀏覽器:用開發者工具找 CSS Selector
Step 1:設定 Schedule Trigger(排程觸發)
第一步是設定排程,讓工作流每天自動執行。
設定方式:
- Trigger Interval:
Days - Hour:
7(早上 7 點,書榜通常在凌晨更新) - Timezone:
Asia/Taipei
Schedule Trigger
├── Mode: Every Day
├── Hour: 7
└── Timezone: Asia/Taipei
如果你只是要測試,先用 Manual Trigger(手動觸發),確認工作流正常後再改成 Schedule。
Step 2:HTTP Request 擷取網頁 HTML
這是爬蟲的第一步——把目標網頁的 HTML 原始碼抓下來。
HTTP Request 節點設定:
| 設定項 | 值 | 說明 |
|---|---|---|
| Method | GET | 讀取網頁用 GET |
| URL | https://www.books.com.tw/web/sys_saletopb/books | 博客來暢銷榜(範例) |
| Response Format | String | 取得原始 HTML |
| Options → Timeout | 10000 | 10 秒逾時 |
| Options → Headers | User-Agent: Mozilla/5.0… | 模擬瀏覽器請求 |
這邊要特別注意:一定要設定 User-Agent。很多網站會封鎖沒有 User-Agent 的請求。加上一個正常的瀏覽器 User-Agent 就能解決大部分 403 Forbidden 問題。
Headers:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Step 3:HTML Extract 解析書榜資料
拿到 HTML 之後,接下來要用 HTML Extract 節點 搭配 CSS Selector 把我們要的資料「撈出來」。
如何找到正確的 CSS Selector?
- 打開 Chrome,到目標網頁
- 右鍵點擊你要擷取的元素(例如書名)
- 選擇「檢查」(Inspect)
- 在 Elements 面板中找到對應的 HTML 元素
- 右鍵 → Copy → Copy selector
HTML Extract 節點設定範例:
| 擷取欄位 | CSS Selector | Extraction Type |
|---|---|---|
| 書名 | .item .餐name h4 a | Text |
| 作者 | .item .author a | Text |
| 價格 | .item .price .price_a | Text |
| 排名 | .item .no | Text |
| 書籍連結 | .item .餐name h4 a | Attribute (href) |
重點來了:CSS Selector 是這個工作流的核心技能。你不需要學很深,只要記住幾個基本的:
.class-name— 選取 class#id-name— 選取 iddiv > p— 選取直接子元素div p— 選取所有後代元素:nth-child(n)— 選取第 n 個
如果你對 CSS Selector 不熟悉,也可以參考 n8n HTTP Request 與 Webhook 完整教學 裡面有更基礎的 HTML 概念說明。
Step 4:Set 節點整理欄位格式
HTML Extract 擷取出來的資料通常需要清洗。比如價格可能是 $350元,但你只想要數字 350。
Set 節點設定範例:
// 清洗價格(移除 $ 和 元)
clean_price = {{ $json.價格.replace(/[$元,]/g, '') }}
// 清洗排名(只保留數字)
clean_rank = {{ $json.排名.replace(/[^0-9]/g, '') }}
// 加上擷取日期
crawl_date = {{ $now.format('YYYY-MM-DD') }}
// 組合完整 URL
full_url = {{ 'https://www.books.com.tw' + $json.書籍連結 }}
整理後的資料結構:
| 欄位 | 範例值 |
|---|---|
| 排名 | 1 |
| 書名 | AI 時代的生存指南 |
| 作者 | 某某某 |
| 價格 | 350 |
| 連結 | https://www.books.com.tw/products/… |
| 擷取日期 | 2026-02-11 |
Step 5:Google Sheets 儲存結果
整理好的資料寫入 Google Sheets,方便後續分析。
Google Sheets 節點設定:
- Operation:
Append Row - Sheet: 書榜追蹤(每日新增一筆)
- Columns: 排名、書名、作者、價格、連結、擷取日期
Google Sheets 結構建議:
Sheet 1: 每日排行 (Append)
| 日期 | 排名 | 書名 | 作者 | 價格 | 連結 |
Sheet 2: 排名趨勢 (Pivot Table)
| 書名 | 1/1排名 | 1/2排名 | 1/3排名 | 趨勢 |
這邊要特別注意:用 Append Row 而不是 Update Row。因為我們要保留每天的歷史紀錄,這樣才能分析排名趨勢。
Google Sheets 認證的詳細步驟可以參考 Google OAuth 設定教學。
Step 6:異常通知(可選)
最後加一個通知機制,當爬蟲失敗時通知你。
Error Trigger 節點 → LINE/Email 通知
Error 情況:
1. HTTP 403 Forbidden → 網站可能更新了反爬機制
2. HTML 結構變更 → CSS Selector 可能需要更新
3. 連線逾時 → 網站暫時無法存取
不用一次學完,慢慢來比較快。先把 HTTP Request + HTML Extract 跑通,確認能抓到資料,再慢慢加上 Set 清洗和 Google Sheets 儲存。
📊 比較分析:n8n 爬蟲 vs Python vs Apify vs Make
| 比較項目 | n8n | Python (BeautifulSoup) | Apify | Make (Integromat) |
|---|---|---|---|---|
| 學習門檻 | 低(拖拉式) | 高(需會 Python) | 中(有模板) | 低(拖拉式) |
| 程式碼 | 不需要 | 需要寫 | 可用模板 | 不需要 |
| 靜態網頁 | 完美支援 | 完美支援 | 完美支援 | 支援 |
| JavaScript 渲染 | 不支援 | 需 Selenium | 原生支援 | 不支援 |
| 排程功能 | 內建 | 需自己寫 cron | 內建 | 內建 |
| 錯誤處理 | 拖拉設定 | 需自己寫 | 內建 | 拖拉設定 |
| 資料儲存 | 直接連 Google Sheets | 需自己寫 | 內建資料集 | 直接連 Google Sheets |
| 費用 | $0(自架) | $0 | $49/月起 | $10.59/月起 |
| 大量爬取 | 適合(< 1000 頁/天) | 極佳(無限) | 極佳(分散式) | 受限(執行次數) |
| 反爬對策 | 基本(Header 設定) | 完整(Proxy、Captcha) | 完整(Proxy Pool) | 基本 |
| 最適合 | 日常監測、簡單擷取 | 複雜爬蟲、大量資料 | 商業級爬蟲 | 簡單擷取 |
我的結論:
- 每天爬 1-3 個網站、擷取表格/排行榜:n8n 是最佳選擇,零成本、零程式碼
- 需要爬 JavaScript 渲染頁面:用 Python + Playwright,或直接用 Apify
- 大量爬取(上萬頁):Python Scrapy 或 Apify,n8n 的 HTTP Request 不適合高頻爬取
- 已經會 Python 又需要複雜邏輯:直接寫 Python,然後用 n8n 的 Execute Command 節點觸發
簡單來說:n8n 不是最強的爬蟲工具,但它是最容易上手、且一站式整合最完整的。
🏢 進階應用場景
場景一:內容行銷選題
- 目標:追蹤技術書籍排名,找出上升趨勢的主題
- 工作流:每日爬取 → Google Sheets → 每週用 n8n 的 Code 節點計算排名變化 → 上升超過 5 名的書籍自動標記
- 產出:每週一份「趨勢主題報告」,做為 YouTube 影片選題參考
場景二:電商競品監控
- 目標:追蹤競品在各平台的價格變化
- 工作流:定時爬取蝦皮/MOMO/PChome 的特定商品頁 → 比價 → 價格低於閾值時通知
- 注意:大型電商平台的反爬機制較嚴格,建議控制在每天 1-2 次
場景三:新聞摘要自動化
- 目標:每天早上自動擷取特定媒體的頭條新聞
- 工作流:HTTP Request 擷取新聞列表頁 → HTML Extract 取得標題和摘要 → 整理後用 LINE 推送每日新聞摘要
- 延伸:搭配 n8n RSS 新聞摘要 做更完整的新聞監測
✅ 重點整理
- n8n 爬蟲 = HTTP Request + HTML Extract + Set——三個節點就能完成 80% 的網頁資料擷取需求
- CSS Selector 是核心技能——用 Chrome 開發者工具「右鍵 → 檢查 → Copy Selector」是最快的學習路徑
- 一定要設定 User-Agent Header——沒有 User-Agent 是被 403 封鎖的第一大原因
- 用 Set 節點清洗資料——正規表達式(Regex)是你的好朋友,
replace(/[^0-9]/g, '')可以解決大部分格式問題 - Google Sheets 用 Append Row——保留每日歷史紀錄,才能分析趨勢變化
- 合規爬蟲很重要——遵守 robots.txt、控制頻率、不爬個資
- n8n 適合日常監測,不適合大量爬取——超過 1000 頁/天的需求,考慮 Python 或 Apify
❓ 常見問題 FAQ
Q1: n8n 爬蟲會被網站封鎖嗎?怎麼避免?
A: 會,如果你不注意的話。避免被封鎖的關鍵做法:
- 設定 User-Agent:模擬正常瀏覽器的請求,這是最基本的
- 控制頻率:每日 1-2 次就好,不要每分鐘爬一次
- 遵守 robots.txt:在目標 URL 後加
/robots.txt查看允許爬取的路徑 - 加入延遲:如果需要爬多頁,在 n8n 的 Wait 節點加入 2-5 秒的隨機延遲
- 不要爬取敏感資料:個人資料、登入後的內容,這些不該爬
大部分書榜、新聞網站只要控制好頻率(每天 1 次),加上正確的 User-Agent,基本上不會有問題。
Q2: 如何解析複雜的 HTML 結構?CSS Selector 寫不出來怎麼辦?
A: 這是初學者最常遇到的問題。我的建議是用「三步驟定位法」:
- Chrome 開發者工具:右鍵點擊目標元素 → 檢查 → Elements 面板會自動跳到對應的 HTML
- Copy Selector:右鍵 HTML 元素 → Copy → Copy selector,Chrome 會自動生成 CSS Selector
- 在 n8n 測試:把 Selector 貼到 HTML Extract 節點,手動執行看結果是否正確
如果 Chrome 自動生成的 Selector 太長或太脆弱,可以手動簡化。例如 Chrome 可能給你 #main > div:nth-child(3) > ul > li:nth-child(1) > h3 > a,但其實 .book-title a 就夠了。
進階技巧:如果實在找不到,把 HTML 片段貼給 ChatGPT,請它幫你寫 CSS Selector,準確率很高。
Q3: 可以擷取需要登入的網站嗎?
A: 技術上可以,但比較複雜,而且要注意合規性:
方法一:Cookie 認證
- 先在瀏覽器登入目標網站
- 用開發者工具 → Network → 找到 Cookie
- 在 n8n HTTP Request 的 Headers 加入 Cookie
方法二:API 存取
- 很多需要登入的網站其實有 API(看 Network 面板的 XHR 請求)
- 直接呼叫 API 比爬 HTML 更穩定
方法三:n8n + Headless Browser(進階)
- 用 n8n 的 Execute Command 節點搭配 Puppeteer
- 可以模擬完整的瀏覽器行為,包括登入
我的建議:如果目標網站有 API,優先用 API。爬取登入後的內容要特別注意 Terms of Service。
Q4: 網站改版後 CSS Selector 失效怎麼辦?
A: 這是所有爬蟲都會遇到的問題,不只是 n8n。應對策略:
- 加入 Error Handling:在 n8n 工作流加上 Error Trigger,當 HTML Extract 回傳空值時自動通知你
- 用穩定的 Selector:優先用
id和語意化的class,避免用nth-child這種位置依賴的 Selector - 定期檢查:每週看一下 Google Sheets 的資料是否正常
- 快速修復:收到通知後,用 Chrome 開發者工具重新找 Selector,通常 5 分鐘就能修好
每個高手都是從新手開始的。爬蟲壞掉是正常的,修好它就是你的成長。
Q5: n8n 爬蟲的效能極限在哪裡?
A: n8n 自架版的爬蟲效能取決於兩個因素:
伺服器規格:
- 一般 VPS(2 核 4GB):每次可爬取 100-200 頁,足夠日常監測
- 進階 VPS(4 核 8GB):每次可爬取 500-1000 頁
目標網站限制:
- 大部分網站的 Rate Limit 是每分鐘 60 請求
- 書榜、新聞這類公開頁面通常更寬鬆
我的建議:如果你的需求是每天爬 3-5 個網站、各擷取 20-50 筆資料,n8n 綽綽有餘。超過 1000 頁/天的需求,就該考慮 Apify 或 Python Scrapy 了。
n8n 的定位是「自動化平台」而不是「爬蟲框架」。它的強項在於整合——爬完資料之後的分析、儲存、通知這些後續處理,n8n 比任何純爬蟲工具都方便。
🎯 下一步行動
🎓 想更有系統地學會這些技巧? 到 AI 職場工作術(雲端方程式 Cloud F1 旗艦課程) 看看完整的實作路徑。
如果你看完這篇教學,想動手打造自己的網頁爬蟲工作流,建議按照以下步驟:
- 選一個目標網站:先從簡單的公開排行榜開始(例如書榜、電影榜)
- 學會 CSS Selector:打開 Chrome 開發者工具,練習用「右鍵 → 檢查 → Copy Selector」
- 建立基本工作流:HTTP Request → HTML Extract → 手動執行,確認能抓到資料
- 加上儲存和通知:Google Sheets + Schedule Trigger + Error 通知
- 擴展到其他場景:新聞監測、電商比價、招聘追蹤
先求大概懂,再開始用,最後才能做成功!
想跟其他學員一起學、一起討論爬蟲技巧?
- 💬 加入學習社群:Skool 雲端方程式 Cloud F1(免費加入,和 500+ 學員一起學)
- 📧 訂閱電子報:每週收到最新 AI 自動化技巧
希望這篇對你有幫助!有問題歡迎在下面留言。
🔗 相關資源
- 📺 n8n 零基礎教學|6 大實戰 Lab 完整指南 — 從零開始學 n8n 的完整教學
- 📺 n8n RSS 新聞摘要自動化 — 另一種資料收集自動化方式
- 📺 n8n HTTP Request 與 Webhook 完整教學 — HTTP 節點的進階用法
- 📺 n8n 功能與應用完整指南 — n8n 能做什麼的全面介紹
- 🔗 n8n 官方文件 - HTTP Request Node — HTTP Request 節點官方文件
- 🔗 MDN CSS Selectors 教學 — CSS Selector 語法參考
本文改編自 n8n 課程模組(lab爬蟲-熱銷書榜整理),由 Alex Hsieh 撰寫。最後更新:2026-02-11