先講結論
- n8n 爬網頁最基本的組合:HTTP Request 節點把網頁抓下來,HTML 節點用 CSS 選擇器挑出要的資料,清單再用 Split Out 拆成一筆一筆。我用這個組合抓書店示範網站的首頁,4 秒拿到 20 本書的書名、價格、庫存和評分。
- 一般網頁抓得到,JavaScript 動態產生的網頁抓不到:同一個名言網站,一般版抓到 10 則,動態版拿到的是空陣列,因為資料不在網頁原始碼的 HTML 裡。
- 動態網頁如果把資料藏在原始碼的一段程式裡,可以用 Code 節點挖出來,我實測一樣拿到 10 則。真的要執行 JavaScript 才看得到的網站,就得用無頭瀏覽器或第三方的爬蟲服務。
目錄
你想讓 n8n 每天去某個網站看一下:商品價格有沒有降、公告有沒有更新、新的職缺或房屋物件,有就整理好寄給你。這種「定時去網站抓資料」的事,就是大家說的爬蟲,n8n 不用寫程式也做得到。
這篇用最基本的組合示範怎麼做,每個流程我都在 n8n 2.43.5 上實際跑過,結果貼在下面,流程檔也可以直接匯入。練習的對象是 toscrape.com,一個專門給人練習爬蟲的示範網站,網頁上寫明這是給爬蟲練習用的,價格和評分都是隨機的。
還沒裝 n8n 的話,先看 n8n 安裝教學;第一次做流程,先看 n8n 教學。
爬之前先確認能不能爬
抓自己的網站或練習網站沒問題。要抓別人的網站,先做這幾件事:
- 看網站的使用條款,有些寫明不准自動抓取。
- 看網站根目錄的
robots.txt,裡面會寫哪些路徑不歡迎機器人。 - 抓的頻率放低,一天幾次就夠,不要一分鐘抓一次。
- 不要抓個人資料;抓回來的文字、圖片也有著作權,自己看可以,拿去轉貼要小心。
原理:兩個節點就夠
n8n 爬網頁最基本的組合只有兩個節點:
- HTTP Request:像瀏覽器一樣去要一個網址,拿回整頁的 HTML。
- 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 這個專門給人練習爬蟲的示範網站)。哪些有跑、哪些沒跑,文中各段有寫。價格與方案以官方頁面為準,工具改版後內容可能過期。