n8n 爬蟲教學:HTTP Request+HTML 節點抓網頁資料,流程檔可直接匯入,我實測 4 種情況

部分實測2026.10.15

想讓 n8n 定時去網站抓價格、新聞或清單,最基本的組合是 HTTP Request 抓網頁、HTML 節點用 CSS 選擇器把資料挑出來。這篇用專門給人練習爬蟲的網站實際跑了 4 個流程:抓書店首頁 20 本書的書名和價格、一般網頁和 JavaScript 動態網頁的差別、以及動態網頁怎麼用 Code 節點把資料挖出來。流程檔可以直接匯入。2026 年 10 月 15 日實測。

更新 2026/10/15・約 7 分鐘讀完・查證環境:n8n 2.43.5 官方 Docker 映像檔,跑在 Vercel Sandbox 的雲端測試機(Ubuntu、2 核心 4 GB)。4 個流程都是寫成檔案、用 n8n 的指令匯入和執行(import:workflow、execute),沒有在編輯器畫面上操作;目標是 toscrape.com 這個專門給人練習爬蟲的示範網站

先講結論

  • n8n 爬網頁最基本的組合:HTTP Request 節點把網頁抓下來,HTML 節點用 CSS 選擇器挑出要的資料,清單再用 Split Out 拆成一筆一筆。我用這個組合抓書店示範網站的首頁,4 秒拿到 20 本書的書名、價格、庫存和評分。
  • 一般網頁抓得到,JavaScript 動態產生的網頁抓不到:同一個名言網站,一般版抓到 10 則,動態版拿到的是空陣列,因為資料不在網頁原始碼的 HTML 裡。
  • 動態網頁如果把資料藏在原始碼的一段程式裡,可以用 Code 節點挖出來,我實測一樣拿到 10 則。真的要執行 JavaScript 才看得到的網站,就得用無頭瀏覽器或第三方的爬蟲服務。
目錄
  1. 爬之前先確認能不能爬
  2. 原理:兩個節點就夠
  3. 範例一:抓書店首頁 20 本書
  4. 範例二:同一個設定,有的網頁抓得到、有的抓不到
  5. 範例三:動態網頁,用 Code 節點挖出藏起來的資料
  6. 接下來:定時跑、只通知新的
  7. 這篇沒有測的

你想讓 n8n 每天去某個網站看一下:商品價格有沒有降、公告有沒有更新、新的職缺或房屋物件,有就整理好寄給你。這種「定時去網站抓資料」的事,就是大家說的爬蟲,n8n 不用寫程式也做得到。

這篇用最基本的組合示範怎麼做,每個流程我都在 n8n 2.43.5 上實際跑過,結果貼在下面,流程檔也可以直接匯入。練習的對象是 toscrape.com,一個專門給人練習爬蟲的示範網站,網頁上寫明這是給爬蟲練習用的,價格和評分都是隨機的。

還沒裝 n8n 的話,先看 n8n 安裝教學;第一次做流程,先看 n8n 教學。

爬之前先確認能不能爬

抓自己的網站或練習網站沒問題。要抓別人的網站,先做這幾件事:

  • 看網站的使用條款,有些寫明不准自動抓取。
  • 看網站根目錄的 robots.txt,裡面會寫哪些路徑不歡迎機器人。
  • 抓的頻率放低,一天幾次就夠,不要一分鐘抓一次。
  • 不要抓個人資料;抓回來的文字、圖片也有著作權,自己看可以,拿去轉貼要小心。

原理:兩個節點就夠

n8n 爬網頁最基本的組合只有兩個節點:

  1. HTTP Request:像瀏覽器一樣去要一個網址,拿回整頁的 HTML。
  2. HTML(選 Extract HTML Content):用 CSS 選擇器,從 HTML 裡挑出你要的那幾塊,例如書名、價格。

網頁上如果是一整排東西(一排商品、一排文章),中間再加一個 Split Out,把清單拆成一筆一筆,後面才好逐筆處理。

CSS 選擇器怎麼找:在瀏覽器對著想抓的東西按右鍵、選「檢查」,開發者工具會標出那一段 HTML,看它的 class 名稱,或在那一行按右鍵選「Copy selector」。

範例一:抓書店首頁 20 本書

流程檔:

https://yuntech.idv.tw/files/n8n-scrape-books.json

在 n8n 畫布右上角的流程選單選 Import from URL,貼上這個網址就能匯入。流程是這樣接的:

節點 設定
抓網頁(HTTP Request) GET https://books.toscrape.com/
切出每本書(HTML) 選擇器 article.product_pod,回傳 HTML,勾 Return Array
一本一筆(Split Out) 拆開 books 這個欄位
取出欄位(HTML) 書名:h3 a 的 title 屬性;價格:.price_color 的文字;庫存:.availability;評分:p.star-rating 的 class

做法是兩段式的:先把每本書整塊切出來,拆成一本一筆,再從每一塊裡挑欄位。這樣書名和價格才會對在同一筆,不會變成兩個對不起來的清單。

我在測試機上用指令執行,連同啟動 n8n 共 4.4 秒,拿到 20 筆,前三筆是:

書名 價格 庫存 評分
A Light in the Attic £51.77 In stock star-rating Three
Tipping the Velvet £53.74 In stock star-rating One
Soumission £50.10 In stock star-rating One

評分抓到的是 class 的整串文字,例如 star-rating Three,要變成數字可以再接一個 Edit Fields 節點處理。最後的取出欄位那個節點,我把 Trim Values(去掉前後的空白和換行)和 Clean Up Text(把連續的空白縮成一個)兩個選項都打開了。抓網頁上的文字建議都開,網頁原始碼裡常夾著換行和空白。

範例二:同一個設定,有的網頁抓得到、有的抓不到

我用名言網站做對照。這個網站有兩個版本:一般版直接把名言寫在 HTML 裡,動態版是用 JavaScript 在瀏覽器裡才把名言畫出來。兩個版本在瀏覽器裡看起來一模一樣。

同一個流程(HTTP Request 加 HTML 節點,選擇器 .quote .text 和 .quote .author),只換網址:

網址 抓到的名言 花多久
quotes.toscrape.com 10 則,作者 10 位 4.5 秒
quotes.toscrape.com/js/ 空陣列 4.0 秒

動態版回來的是 "quotes": []。原因是 HTTP Request 不會執行 JavaScript,它拿到的是「原始碼」,而動態版的原始碼裡,一個 class 是 quote 的元素都沒有。

判斷方法很簡單:在瀏覽器的網頁上按右鍵,選「檢視網頁原始碼」,搜尋你要抓的那段文字。搜得到,HTTP Request 就抓得到;搜不到,就是動態產生的。

範例三:動態網頁,用 Code 節點挖出藏起來的資料

動態網頁的資料總得從某個地方來。我打開名言動態版的原始碼,發現名言整批寫在一段程式裡,開頭是 var data = [,只是沒有變成 HTML。這種情況可以用 Code 節點直接把那段挖出來。

流程檔:

https://yuntech.idv.tw/files/n8n-scrape-js.json

Code 節點裡的程式只有幾行:

const html = $input.first().json.data;
const m = html.match(/var data = (\[[\s\S]*?\]);/);
if (!m) return [{ json: { error: 'not found' } }];
const data = JSON.parse(m[1]);
return data.map(q => ({ json: { text: q.text, author: q.author.name } }));

意思是:在原始碼裡找到 var data = [...] 那一段,當成資料解析,再整理成一則一筆。我實際執行,5 秒拿到 10 則名言和作者,跟一般版的結果一樣。

這招只適用於「資料其實就在原始碼裡」的網站。很多網站是瀏覽器打開之後,再另外向伺服器要資料。這時可以在開發者工具的「網路」分頁看它向哪個網址要資料,直接用 HTTP Request 去要那個網址,常常拿到的是整理好的 JSON,比解析 HTML 還簡單。如果連這也行不通,就得用無頭瀏覽器(在伺服器上跑一個沒有畫面的瀏覽器),或接第三方的爬蟲服務。這兩種我這次沒有測。

接下來:定時跑、只通知新的

上面的流程都是手動按一下才跑。要它每天自己跑,把開頭的手動觸發換成 Schedule Trigger,設定每天幾點,再把結果存到 Google Sheets、寄 Email 或傳到聊天軟體。

每天抓同一頁,大部分內容是重複的。站上的 n8n 範例與模板 有一個「名單去重複」的流程,可以接在後面,只留下新的那幾筆再通知你。排程怎麼設、第一個流程怎麼發佈,在 n8n 教學。

要它每天準時跑,n8n 就得一直開著。放在自己的電腦,電腦一睡眠就停了;要穩定的話,用 n8n Cloud,或放在一台雲端主機上,例如 Hostinger 有預先裝好 n8n 的方案。各種放法怎麼部署,在 n8n 部署教學。n8n 要選 Hostinger 哪一級方案、續約價多少,我整理在 Hostinger 評價。

這篇沒有測的

在 n8n 編輯器畫面上操作(我用指令匯入和執行);一次抓很多頁的分頁設定;需要登入才看得到的網站;會擋機器人的網站;無頭瀏覽器和第三方爬蟲服務;把結果寫進 Google Sheets 或傳到聊天軟體,這些都需要另外的帳號。

常見問題

n8n 可以當爬蟲嗎?

可以。用 HTTP Request 節點抓網頁,HTML 節點的 Extract HTML Content 用 CSS 選擇器挑資料,再接排程定時跑。我在 n8n 2.43.5 上抓書店示範網站的首頁,一次拿到 20 本書的書名、價格、庫存和評分。

n8n 爬蟲抓不到資料、回傳空陣列?

最常見的原因是網頁的內容是 JavaScript 跑出來的,HTTP Request 抓到的原始碼裡根本沒有那些元素。確認方法是在瀏覽器按「檢視網頁原始碼」,搜尋你要的文字;找不到就是動態網頁。另一個原因是 CSS 選擇器寫錯,或網站擋了機器人。

動態網頁 n8n 要怎麼抓?

先看原始碼裡有沒有把資料寫在一段程式裡,有的話用 Code 節點把那段挖出來解析,我實測可行。完全要執行 JavaScript 才出現的內容,就要用無頭瀏覽器,或接第三方的爬蟲服務,這兩種我沒有測。

爬別人的網站合法嗎?

要看網站的使用條款和抓的內容。開始前先看網站的 robots.txt 和使用條款,別抓個人資料,抓的頻率要低,抓回來的文字和圖片也有著作權。這篇用的 toscrape.com 是專門給人練習爬蟲的示範網站,網站上寫明歡迎被抓。

這篇怎麼查證的

這篇只有一部分實際跑過,其餘依官方文件整理,查證日期 2026/10/15(n8n 2.43.5 官方 Docker 映像檔,跑在 Vercel Sandbox 的雲端測試機(Ubuntu、2 核心 4 GB)。4 個流程都是寫成檔案、用 n8n 的指令匯入和執行(import:workflow、execute),沒有在編輯器畫面上操作;目標是 toscrape.com 這個專門給人練習爬蟲的示範網站)。哪些有跑、哪些沒跑,文中各段有寫。價格與方案以官方頁面為準,工具改版後內容可能過期。