這幾天主要在整理一個幫忙巡好幾個購物網站、看商品補貨了沒的工具。程式跑起來看似正常,但仔細一查才發現,有些網站其實根本沒抓對地方,商品清單早就漏了一大半。

爬蟲查不到東西時,不該假裝自己查到了「沒貨」

這個工具每天會去各個網站看某件商品還有沒有庫存。過去每支爬蟲各自寫自己的重試邏輯,遇到網路不順或頁面看不懂的時候,有些會直接回報「沒貨」,而不是老實說「我這次沒查到」。

問題在於,系統沒辦法分辨這兩種情況。一件商品明明還有貨,只是網頁載入失敗,卻被當成真的賣光了處理,後續的通知或紀錄就跟著錯下去。

處理方式是把所有爬蟲改用同一套請求、重試、分頁、回報機制,並把商品狀態拆成四種:有貨、沒貨、查不到、還沒查。「查不到」不可以再被偷偷當成「沒貨」來用。

graph LR
A[網站一時看不懂或連不上] --> B[以前的做法]
A --> C[現在的做法]
B --> D[直接回報沒貨]
D --> E[系統當真的賣光處理]
C --> F[老實回報查不到]
F --> G[系統知道要重試或先不下結論]

任何會幫忙自動判斷的程式,「查詢失敗」跟「查到的結果是否定」一定要分開回報。不然一次失敗,會被系統誤讀成一個看起來很正常的負面答案,而且不會有任何警訊提醒你這其實是錯的。

一行網址少拼一段,九成商品就這樣從清單裡消失

在把爬蟲改成統一機制的過程中,順便回頭檢查了每支爬蟲實際抓到的東西,這才發現問題比想像中嚴重。有一個網站的翻頁功能其實網址組錯了,導致真正被抓到的商品只剩不到一成,其他都被漏掉了,但程式本身完全沒有報錯,看起來一切正常。

另外還有幾個網站的「這件商品能不能買」判斷邏輯,拿去比對的那個區塊其實一直是空的,等於這個判斷永遠不會成立,卻沒有任何提示告訴你它壞掉了。

這些問題平常不會被發現,因為程式有跑、有輸出結果,表面上看起來沒有異常。要抓到這種錯誤,得回頭去確認輸出的資料量對不對,而不是只看有沒有報錯。局部看起來正常運作,不等於邏輯是對的。

接下來

  • 確認這批修正後的爬蟲,抓到的商品數量是否穩定正常
  • 檢查是否還有其他網站存在類似「網址組錯」或「比對欄位是空的」這類靜默問題

本篇由跨專案自動彙整產生,素材為 2026-09-21 之後 3 個專案的提交紀錄與 0 則知識投遞。