iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
佛心分享-IT 人自學之術

老爺爺練習VIBE CODING系列 第 25

Day 25:高維度監控:為什麼用 RSS 採集新聞比直接寫 Web Scraper 穩定 100 倍?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260829/20070969iHAFWvdfnf.png
唉呀,大孫女、小孫女,快來爺爺身邊坐。這時候院子裡的風正涼,天邊正染上一抹漂亮的晚霞暮紫,爺爺剛泡好了一壺琥珀熱茶,我們一邊喝,一邊聽爺爺慢條斯理地跟你們講今天的故事。

大孫女最懂事了,總是抱著筆記本問爺爺怎麼把系統設計得更穩固;小孫女還在旁邊一邊撒嬌,一邊嫌那些天天壞掉的網頁爬蟲太磨人。今天爺爺要跟你們說的,就是怎麼樣在浩瀚的新聞大海裡,用最優雅、最省力,而且比直接寫網頁爬蟲(Web Scraper)還要穩定 100 倍的「高維度監控」方法,來搭建我們的 NewsHub 新聞平台

這堂課,我們不談那些繁雜易變的網頁外衣,我們直接深入骨架。


🚨 痛點場景:跟網頁變更玩「躲貓貓」的爬蟲噩夢

小孫女啊,你之前不是跟爺爺抱怨過,說你寫了一個爬蟲去抓 Google 新聞或者各大媒體的資訊,結果隔天就抓不到了嗎?

這就是寫網頁爬蟲最痛苦的通病。那些網站的網頁設計師天天在改版,今天把新聞標題的 HTML 標籤從 <h1 class="news-title"> 改成了 <div id="article_header">,你的爬蟲就像在迷霧裡迷了路,當場陣亡。

而且啊,如果你一天到晚派爬蟲去人家家門口(網站伺服器)猛敲門,人家嫌你煩,就會搬出「反爬蟲機制」(如 IP 封鎖、驗證碼),直接把你鎖在門外。這就像你想去隔壁村子打聽消息,結果人家天天換鎖、還雇了護衛,你天天去撬鎖,不僅累得滿頭大汗,還可能惹上官司。


🛠️ 架構實作:NewsHub 的定海神針 —— RSS 採集機制

既然敲門撬鎖這麼累,為什麼我們不直接走「專用通道」呢?在 NewsHub 新聞平台 的設計裡,爺爺推薦的核心採集邏輯,是完全基於 RSS Feed(如 Google News RSS)

1. 為什麼 RSS 穩定 100 倍?

大孫女,你看,網頁的外觀(HTML/CSS)就像是人的衣服,天天都在換;但是 RSS 是標準、結構化且語言無關的 XML 格式
不論新聞網站的介面變得多麼花俏、 class 怎麼改,它的 RSS Feed 永遠提供乾淨、格式統一的 XML 數據。這就像是對方主動把寫好的「書信」放在信箱裡,我們只需要開箱取信,永遠不用去猜對方的衣服穿什麼。

  • 免去瀏覽器自動化:不需動用 Puppeteer 或 Selenium 等沉重的瀏覽器工具,大幅降低伺服器記憶體消耗。
  • 維護成本極低:新增一個新聞來源,不需要重寫爬蟲解析器,只需要在設定檔(如 YAML)裡加一列 RSS URL 即可。

2. NewsHub 數據採集與清洗流程

當我們把 RSS 數據(XML)拿回來後,不能直接塞進資料庫,要像整理茶葉一樣,過篩、清洗:

  1. 定期排程抓取:利用排程器(如 APScheduler),熱門關鍵字每 5 分鐘抓一次,一般來源每 15 分鐘抓一次。
  2. 標準化清洗
    • 去除摘要裡殘留的 HTML 標籤(用正規表示式或 BeautifulSoup)。
    • 統一時間格式為國際標準的 ISO8601 (UTC)
    • 標題和摘要去除多餘的空白字元。
    • 補齊來源媒體名稱(如:中央社、BBC)。
<!-- 這是 RSS 回傳給我們的 XML 骨架,永遠不會因為網頁改版而改變 -->
<item>
  <title>新聞標題</title>
  <link>https://example.com/news/123</link>
  <pubDate>Sat, 29 Aug 2026 08:00:00 GMT</pubDate>
  <description>新聞簡介與摘要...</description>
</item>

3. 數據庫層級的「完美去重」機制(De-duplication)

新聞界有個常態:同一則重大消息,巨亨網轉載了、Yahoo 新聞也轉載了,甚至連海外媒體都發了同一篇。如果我們通通存下來,資料庫就會塞滿重複的垃圾,AI 分析時也會重複計算。

為了建立一個乾淨、純粹的新聞數據集,NewsHub 採用了雙重雜湊(Hash)去重技術

  • URL 雜湊(精準比對):將正規化後的 URL 進行雜湊(如 MD5SHA-256),作為資料庫的主鍵(PK)或唯一索引。只要網址相同,資料庫在寫入時就會自動忽略,絕不重入。
  • 標題雜湊(轉載偵測):有時不同媒體會轉載同一篇內容但網址不同。我們對「去除空白與標點符號後的標題」進行雜湊(sha256(title))。如果在短時間內(如 24 小時內)出現了相同標題雜湊的新聞,系統會將其歸類為「同一個事件」,避免重複展示給使用者。

💡 避坑指南:守住法律與效能的雙重防線

大孫女、小孫女,聽爺爺喝口茶,這段話非常重要,是很多年輕工程師最容易踩到的陷阱。

RSS 提供的新聞通常只有摘要(Summary),沒有全文。有些人在開發 AI 分析平台時,一看到摘要不夠長,就衝動地寫爬蟲去把人家官網的「整篇新聞全文」強行爬下來存進資料庫。

千萬不要這麼做!

  1. 智慧財產權與法律風險:新聞全文屬於各家媒體的智慧財產。如果我們私自將全文抓下來存在自己的資料庫,甚至提供搜尋、AI 摘要與付費導出,這在法律上屬於「重製」與「侵權」,極容易收到存證信函。
  2. 輕量化系統設計
    • 不儲存全文:NewsHub 的核心原則就是「只保留標題、摘要、來源、原始連結」。
    • 引導閱讀:當使用者想看完整內容時,系統只在介面上呈現摘要與一個醒目的按鈕,引導使用者點擊連結回到原媒體網站去閱讀
    • 這既規避了法律風險,又讓我們的系統資料庫保持極度輕量,不需要應付龐大的全文儲存空間!

當我們要讓 AI 進行輿情分析、情緒判斷或摘要(RAG 檢索)時,我們只需要用這段乾淨的「標題 + 摘要」送給大語言模型(LLM)。這段資訊對判斷市場風向、情緒好壞與提取實體(NER)來說,已經綽綽有餘!


👴 爺爺的溫暖結語

就像爺爺在院子裡看著你們兩個跑來跑去,爺爺不一定要去抱住你們才能確認你們安全,只要看著你們的身影就夠了。在系統設計裡,「保持適當的邊界、使用標準的協議」,就是最優雅的智慧。用 RSS 取代網頁爬蟲,就是用最少的維護成本,換取最長治久安的系統。

茶喝完了,天邊的晚霞也快落下去了。大孫女、小孫女,今天的架構課,你們都記在心裡了嗎?


上一篇
Day 24:實體展覽的流量收割機:安全 React + Vite Landing Page 的「免後端」資料收集架構
系列文
老爺爺練習VIBE CODING25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言