n8n 爬蟲資料清洗實戰:一篇學會用 Set 節點,完美清除空白、換行與無用字元

n8n 爬蟲 資料清理

恭喜你!在學會了如何使用 n8n 打造自動化爬蟲之後,你已經成功地從 PTT、Dcard 或其他新聞網站上,抓取到了寶貴的原始 HTML 資料,並透過 HTML Extract 節點,提取出了文章的標題、作者與日期。但當你興奮地將這些資料寫入 Google Sheets 或發送到 Slack 時,卻發現結果長得像這樣:

  • 標題: \n\t\t\t\t\t\t\t[好雷] 沙丘2:完美的電子遊戲改編\n\t\t\t\t\t\t
  • 作者: \n aabbcc (優文產生器)\n
  • 日期: 9/07

這些夾雜著大量空白 ()、換行符 (\n)、定位符 (\t) 的「髒數據 (Dirty Data)」,不僅看起來礙眼,更會對你後續的自動化流程造成毀滅性的打擊。你無法根據這種格式的日期進行排序,也無法用這種格式的標題進行精準的關鍵字比對。

這,就是每一位爬蟲開發者都必須面對的第一道、也是最重要的一道關卡:「資料清洗 (Data Cleaning)」。而 n8n 中負責這項任務的最佳利器,正是我們的好朋友——Set 節點。

這篇文章將是你的 n8n 爬蟲資料清洗入門實戰指南。我們將聚焦在最常見的文字清理任務上,一步步教你如何活用 Set 節點與其中強大的 Expressions (表達式),精準地去除掉所有多餘的空白、換行符與無用的前後綴文字,讓你的爬蟲數據,從粗糙的原礦,蛻變為可供分析利用的閃亮黃金。

為什麼爬蟲資料「一定」需要清洗?認識髒數據的隱形殺傷力

許多 n8n 新手在成功抓取到資料後,就急著將其直接應用,卻忽略了資料清洗的重要性。未經清洗的髒數據,至少會帶來三大問題:

  1. 數據庫與報表汙染:\n aabbcc \n 這樣的資料直接存入你的資料庫或 Google Sheets,會導致你的數據庫充滿無用的字元,不僅佔用空間,更讓後續的數據分析與篩選變得極度困難。
  2. 自動化邏輯判斷失準: 如果你想用 IF 節點判斷作者是否為 aabbcc,但抓到的資料卻是 aabbcc (前後有空白),那麼你的條件判斷 {{ $json.author == 'aabbcc' }} 將會回傳 false,導致流程走向非預期的分支。
  3. 前端顯示與通知錯亂: 將一個包含大量換行符的標題,直接發送到 Slack 或 Email,會導致訊息的排版完全跑掉,看起來既不專業,也難以閱讀。

因此,HTML Extract 節點之後,立刻接上一個 Set 節點來進行資料清洗,應該成為你建構任何爬蟲工作流的標準作業流程。

清洗第一式:trim() – 輕鬆去除頭尾多餘的空白

這是最基本,也最常用到的清洗技巧。當你抓到的資料,僅僅是前後被多餘的空白字元包圍時(例如:9/07),trim() 函式就是你的最佳解方。

  • 目標: 將欄位 date 的值從 9/07 清理成 9/07
  • 解決方案:Set 節點中,修改 date 欄位(或新增一個 cleaned_date 欄位)。
    • Name: date
    • Value (使用 Expression):JavaScript{{ $json.date.trim() }}
  • 解說: .trim() 是 JavaScript 中一個內建的字串方法,它會自動刪除一個字串頭部和尾部的所有空白字元,但會保留字串中間的空白。對於清理像日期、數字、ID 這類單純的欄位,它非常有效。

清洗第二式:replace() 與正規表示式 – 徹底剷除所有空白與換行符

trim() 只能處理頭尾,但如果你的資料像 PTT 抓來的標題一樣,中間夾雜著大量的換行符 (\n) 和定位符 (\t) 呢?這時,我們需要動用更強大的武器:replace() 函式搭配「正規表示式 (Regular Expression)」。

  • 目標: 將欄位 title 的值從 \n\t\t [好雷] 沙丘2 \n\t 清理成 [好雷] 沙丘2
  • 解決方案:Set 節點中,修改 title 欄位。
    • Name: title
    • Value (使用 Expression):JavaScript{{ $json.title.replace(/\s+/g, ' ').trim() }}
  • 解說:
    • replace(/\s+/g, ' '): 這是這段語法的核心。
      • /\s+/g 是一個正規表示式。\s 代表任何空白字元(包含空格、換行符 \n、定位符 \t 等),+ 代表一個或多個,g 代表全域尋找與取代。整句話的意思是:「找到這個字串中,所有連續出現的空白字元區塊」。
      • 第二個參數 ' ' 代表,將找到的那些區塊,全部用一個單一的空格取代
    • .trim(): 在完成內部的大掃除後,我們再用 .trim() 來處理可能還殘留在頭尾的單一空格,確保最終結果的完美。
n8n 爬蟲 資料清理

清洗第三式:精準取代 – 刪除固定的前綴或後綴文字

爬取論壇或特定網站時,我們常常會抓到一些我們不想要的、固定的樣板文字,例如 PTT 作者欄位的「作者:」或看板名稱。

  • 目標: 將欄位 author_info 的值從 作者: aabbcc (優文產生器) 清理成 aabbcc (優文產生器)
  • 解決方案: 這次我們只需要使用 replace() 函式,並指定要移除的固定文字即可。
    • Name: author_info
    • Value (使用 Expression):JavaScript{{ $json.author_info.replace('作者: ', '') }}
  • 解說: 這個表達式非常直觀:「找到 作者: 這段固定的文字,並將它用 '' (空字串) 取代」,也就是直接刪除的意思。

完整實戰演練:將 PTT 爬蟲的原始資料清洗乾淨

現在,讓我們將以上所有技巧,應用到我們先前建立的「每日 PTT 電影版情報」爬蟲工作流中。

流程設計: ... -> HTML Extract -> Set (Data Cleaning) -> Google Sheets

假設 HTML Extract 節點輸出的原始資料 ($json) 長這樣:

JSON

{
  "title": "\n\t\t\t\t [好雷] 芙莉歐莎:瘋狂麥斯傳奇篇章\n\t\t\t ",
  "author": " aabbcc (優文產生器) ",
  "date": " 5/22 "
}

我們新增一個名為「Data Cleaning」的 Set 節點,並在裡面建立三條規則:

  1. 清洗 title:
    • Name: title
    • Value: {{ $json.title.replace(/\s+/g, ' ').trim() }}
  2. 清洗 author:
    • Name: author
    • Value: {{ $json.author.trim() }}
  3. 清洗 date:
    • Name: date
    • Value: {{ $json.date.trim() }}

經過這個 Set 節點後,輸出的資料就會變成極度乾淨的結構化數據:

JSON

{
  "title": "[好雷] 芙莉歐莎:瘋狂麥斯傳奇篇章",
  "author": "aabbcc (優文產生-產生器)",
  "date": "5/22"
}

現在,再將這份乾淨的資料送往 Google Sheets 或任何後續的流程,就再也不會出錯了!

n8n 爬蟲 資料清理

結語

資料清洗是爬蟲自動化流程中,最重要、也最能體現專業度的環節。它就像是烹飪前處理食材的過程,唯有先將食材(原始數據)清洗乾淨、去除雜質,你才能在後續的烹調(資料應用)中,發揮出它真正的美味。

n8n 的 Set 節點,搭配靈活的 JavaScript Expressions,為我們提供了一個無比強大的視覺化資料清洗工作台。今天我們學會的三大核心技巧——trim()replace() 與正規表示式——已經足以讓你應對 90% 以上的文字清理場景。

請養成良好的習慣,在每一個爬蟲的 HTML Extract 節點之後,都加上一個專門負責「清洗」的 Set 節點。這個小小的動作,將會讓你的自動化流程變得無比穩定與可靠,也讓你產出的數據,真正地具備了商業價值。

更多精選文章請參考

n8n 與 Zapier 比較:該選哪個?2025年最完整功能、費用、優缺點分析

開源自動化工具推薦:從工作流程到測試,找到最適合你的免費方案

n8n 發送 Email 超詳細教學:從 SMTP 設定到 Gmail 節點串接,一篇搞定!

n8n Notion 串接終極指南:2025 年打造自動化工作流程,效率翻倍!

【n8n 教學】最強 n8n 網頁爬蟲指南,免寫程式也能輕鬆抓取網站資料!

【n8n 教學全攻略】2025最新!從入門到串接實戰,打造你的自動化工作流

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端