YayJun
LOADING
輿情要 24 小時關注 → 非同步爬取、去重、資料彙整。
我的角色|協作開發:非同步爬蟲、反偵測策略、去重機制與多管道通知整合。
01 / 問題與情境
THE PROBLEM / 問題與情境
24小時
輿情不分時段發生,人工盯場效率不佳,半夜的討論常常隔天才看到。
重複
同一則內容會被轉載、轉貼,全部推播只會洗版,重要的反而被覆蓋。
查不回
看過即遺忘,事後想追某個議題時,沒有紀錄可查。
02 / 解決方案
THE SOLUTION / 解決方案
01 排程
非同步輪詢
多來源併發抓取,單一來源異常不拖累查詢。
02 反偵測
降低被擋機率
隨機 UA、間隔抖動與失敗退避,避免被判定為機器人。
03 關鍵
指紋去重
對正規化後的內文取指紋,重複內容只推一次。
04 推播
分級通知
依關鍵字優先級處理不同管道推播,同時寫入記錄可回查。
03 / 系統架構
ARCHITECTURE / 系統架構
1/4 來源層
2/4 抓取層
3/4 去重層・收斂關鍵
Redis 去重
內容指紋比對・時窗內判重
轉載改標題視為同一則
4/4 判定與輸出
※Desktop 版可展示 Data Flow 🖥️
來源層
抓取層
去重層・收斂關鍵
Redis 去重
內容指紋比對・時窗內判重
轉載改標題視為同一則
判定與輸出
04 / 互動演示
INTERACTIVE DEMO / 互動演示
動手桌機可操作可互動啟動監控
排程觸發,讀取本輪要掃的來源與關鍵字
抓取貼文
asyncio 併發抓取,帶反偵測與逾時控制
Redis 去重
內文正規化後取指紋,時窗比對是否已見過
命中關鍵字
對去重後的內容比對關鍵字與優先級規則
推播
依優先級推播,並寫入歷史
啟動監控後,會隨機產生社群貼文,右邊同步給出結論。
※Desktop 版可操作這段演示 🖥️
本頁為去識別化模擬,不含專案原始碼或資料;正規化、指紋與時窗判重都在瀏覽器端執行,貼文內容皆為合成。
啟動監控
排程觸發,讀取本輪要掃的來源與關鍵字
抓取貼文
asyncio 併發抓取,帶反偵測與逾時控制
Redis 去重
內文正規化後取指紋,時窗比對是否已見過
命中關鍵字
對去重後的內容比對關鍵字與優先級規則
推播
依優先級推播,並寫入歷史
來源動態牆/合成資料
已停止
這一則的處理結果
關鍵字命中才推播
監控尚未啟動
推播佇列 ・ 依優先級分流
掛掉 → Telegram ・ 值班群 ・ 退款 → Telegram ・ 客服群 ・ 折價券 → Telegram ・ 行銷群
啟動監控後,會隨機產生社群貼文,右邊同步給出結論。
本頁為去識別化模擬,不含專案原始碼或資料;正規化、指紋與時窗判重都在瀏覽器端執行,貼文內容皆為合成。
05 / 技術選型與設計決策
TECHNOLOGY & DESIGN DECISIONS / 技術選型與設計決策
ALTERNATIVE CONSIDERED
為何用內容指紋去重,而不是比對貼文 ID?
貼文 ID 只能擋掉「同一則被抓了兩次」,但實際造成洗版的是同一段內容以轉載、改標題等形式出現在不同來源。改為對正規化後的內文取指紋,代價是要維護正規化規則,但相對於通知洗版導致值班人員直接忽略,這個取捨是划算的。
06 / 挑戰與成果
CHALLENGES & RESULTS / 挑戰與成果
挑戰 01
長時間運行被判定為機器人
以隨機 UA、間隔抖動與失敗退避降低特徵;單一來源被擋時隔離該來源,其餘照常運作。
挑戰 02
轉載造成的重複通知
改用正規化內文指紋搭配時窗比對,轉載轉貼視為同一則,只推播一次。
全天候
排程不間斷運行,半夜的討論也不會漏掉。
不洗版
去重後只推播需要的,通知才有重點。
可回查
全部寫入 Elasticsearch,事後能追議題發酵時間。