iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
AI & Data

為你自己學 n8n系列 第 6

[為你自己學 n8n] 第 6 天,資料抓取首部曲:結構化資料

  • 分享至 

  • xImage
  •  

Yes

影片連結:https://www.youtube.com/watch?v=8lwvTtUKmOI
YouTube 頻道:https://www.youtube.com/c/kaochenlong

今天要跟大家介紹的是 n8n 裡面一個相當重要的主題:怎麼樣抓取網路資料。

為什麼說這很重要呢?因為在做自動化工作流的時候,第一步往往就是要取得資料。就像做菜需要食材一樣,沒有資料,後面什麼自動化處理都沒辦法進行。

資料格式的種類

根據資料來源和呈現方式的不同,我把抓資料的方法分成三大類來介紹:

1. 結構化資料(本集重點)

這類資料有明確的結構,容易解析處理:

  • JSON:上一集介紹過的資料結構,相對有結構且容易處理
  • RSS:很多新聞網站和部落格提供的格式
  • CSV、XML:其他常見的結構化格式

就算你沒聽過這些格式也別擔心,在 n8n 裡面都有對應的節點可以快速解析。

2. HTML 網頁

當網站沒有提供 JSON 或 RSS 格式時,我們就得硬爬 HTML 網頁內容。這個我們下一集會詳細介紹。

3. 動態產生的資料

最麻煩的就是這種了。很多現代電商網站,如果你去檢視原始碼會發現頁面簡單到不行,但實際上卻能呈現大量資料。那是因為資料是進入網站後才動態產生的。這種對 n8n 來說相當不友善,但我們還是有解法,這會在第三集介紹。

好,今天這一集就是「首部曲」,先來學習怎麼抓取那些比較簡單、有結構性的資料。

實作範例一:抓取 YouBike 即時資料

步驟 1:尋找資料來源

首先,我們需要找到 YouBike 的 API。在 Google 搜尋「YouBike API」,可以找到台北市 YouBike 2.0 的資料。點進去後會看到:

  • 資料格式:JSON
  • 資料內容:即時的站點資訊

在瀏覽器中打開這個 API 網址,會看到密密麻麻的 JSON 資料。如果你用的是 Chrome 瀏覽器,可以勾選美化排版,這樣會好看很多。每個大括號 {} 包起來的就是一個站點資料,例如:

{
  "sno": "500101001",
  "sna": "YouBike2.0_捷運科技大樓站",
  "sarea": "大安區",
  "mday": "2025-09-20 21:12:16",
  "ar": "復興南路二段235號前",
  "sareaen": "Daan Dist.",
  "snaen": "YouBike2.0_MRT Technology Bldg. Sta.",
  "aren": "No.235, Sec. 2, Fuxing S. Rd.",
  "act": "1",
  "srcUpdateTime": "2025-09-20 21:18:29",
  "updateTime": "2025-09-20 21:18:52",
  "infoTime": "2025-09-20 21:12:16",
  "infoDate": "2025-09-20",
  "Quantity": 28,
  "available_rent_bikes": 4,
  "latitude": 25.02605,
  "longitude": 121.5436,
  "available_return_bikes": 24
}

步驟 2:在 n8n 中建立工作流

  1. 建立新工作流

    • 給工作流取個有意義的名字,例如「YouBike 資料」
    • 順便加個 tag 方便日後搜尋,例如「demo」
  2. 加入手動觸發節點

    • 選擇「Trigger manually」作為起點
  3. 加入 HTTP Request 節點

    • 這是個非常重要且常用的節點,幾乎所有網路資料抓取都靠它
    • 搜尋「HTTP」找到「HTTP Request」節點
    • Method 選擇「GET」(讀取資料用)
    • URL 貼上剛才複製的 YouBike API 網址
    • 執行後就能看到抓回來的資料了!

步驟 3:過濾資料

現在我們有了 1600 多筆站點資料,但通常我們只需要特定條件的資料。比如說,我只想找中正區羅斯福路附近的站點。

  1. 第一層過濾:找出「中正區」的站點

    • 加入「Filter」節點
    • 從左側面板拖拉 sarea 欄位到條件設定區
    • 條件設為「equals to」(等於)
    • 值填入「中正區」
    • 執行後剩下 131 筆資料
  2. 第二層過濾:找出羅斯福路的站點

    • 再加一個「Filter」節點
    • 拖拉 ar(地址)欄位
    • 條件改為「contains」(包含)
    • 值填入「羅斯福路」
    • 執行後剩下 14 筆資料
  3. 第三層過濾:找出車輛充足的站點

    • 再加一個「Filter」節點
    • 拖拉 available_rent_bikes(可借車輛數)欄位
    • 條件選擇「is greater than」(大於)
    • 值填入「5」
    • 最後剩下 6 筆符合條件的站點

改善可讀性

為了讓工作流更容易理解,建議幫節點改個有意義的名字:

  • 右鍵點擊節點,選擇「Rename」
  • HTTP Request → 「YouBike 資料」
  • Filter → 「區域」、「地址」、「可借數量」

這樣整個流程就一目了然了!

開發小技巧:Pin Data

這裡分享一個我很常用的技巧。當你在開發測試時,每次執行都要重新抓資料,不但慢,如果 API 要收費的話還很花錢。

解決方法:使用 Pin Data 功能

  1. 點開 HTTP Request 節點的執行結果
  2. 在右上角找到圖釘圖示(Pin data)
  3. 點擊後,資料就被「釘選」了
  4. 節點外觀會改變,表示已釘選
  5. 之後執行時就不會重新抓取,而是使用釘選的資料

注意事項

  • 好處:加快開發速度,省錢
  • 壞處:不會更新資料
  • 重要:上線前記得要解除釘選,否則會一直使用舊資料!

實作範例二:抓取總統府 RSS 新聞

除了 JSON 格式,RSS 也是常見的結構化資料。很多新聞網站都有提供 RSS。

步驟 1:找到 RSS 來源

以總統府網站為例,通常可以在網站上找到 RSS 連結。點進去後會看到 XML 格式的結構化資料(不是給人看的,是給程式讀的)。

步驟 2:使用 RSS Read 節點

  1. 建立新工作流,命名為「總統府新聞」
  2. 加入手動觸發節點
  3. 因為 RSS 是常見格式,n8n 有專門的節點:
    • 搜尋「RSS」
    • 選擇「RSS Read」節點
    • 貼上 RSS 網址
    • 執行就能取得新聞資料

取得資料後,後續的過濾和處理方式就跟處理 JSON 一模一樣了!

流程總結

今天介紹的抓資料流程其實很單純:

  1. 發送請求:使用 HTTP Request 或專門的節點(如 RSS Read)
  2. 取得資料:自動解析 JSON、RSS、CSV 等格式
  3. 過濾篩選:使用 Filter 節點根據條件篩選
  4. 處理輸出:得到符合需求的資料

這個流程跟我們之前做的隨機寶可夢範例一模一樣,都是:取得資料 → 過濾條件 → 得到結果。

下集預告

今天我們處理的都是有結構的資料,相對簡單。但如果網站只有 HTML 頁面,沒有提供 JSON 或 RSS 怎麼辦?沒問題,下一集我們就來看看怎麼爬取 HTML 網頁資料。


上一篇
[為你自己學 n8n] 第 5 天,JSON 不是人名!搞懂自動化的基礎語言!
系列文
為你自己學 n8n6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言