房地產採集變難,原因包括地區脈絡,以及 JavaScript、地圖與分頁拆分結果。建立可重現資料,應先確認資料權利與載入方式,再設計一致、可追溯的生命週期。
房源不是一張全球共用清單
同一住宅在不同市場可使用城市、行政區、郵遞區號或自訂社區邊界;語言、幣別、坪/平方公尺、樓層寫法、時區與更新時間也不同。規格應固定市場、國家、城市、語言、幣別、面積單位與時區,並保存查詢條件及觀察時間,不能把不同地區回應直接合併。
為什麼只抓初始 HTML 會漏房源?
Google 的 JavaScript 技術文件說明,採 app shell 的網站,其初始 HTML 可能不含實際內容,需執行 JavaScript 才形成渲染結果。延遲載入可能在元素進入 viewport 時才取回資料;無限捲動通常形成多批請求,可能用頁碼、offset 或游標銜接。地圖型 API 可能以目前範圍作為查詢條件;例如 OGC API Features 標準以 bbox 篩選相交地物,並用 next 表達後續頁。只下載第一個 HTML 回應,容易只得到版型、首批卡片或局部範圍。
資料來源的正確優先順序
- 政府開放資料:先找可下載、可重用且授權清楚的來源。台灣內政部實價資料供應系統提供授權下載及發布週期說明;英國HM Land Registry Price Paid Data提供月度檔案,但仍須遵守 OGL、標示來源與地址資料條件。
- 官方 API 或授權 feed:依文件處理欄位、游標、速率限制、修訂與下架事件。
- 已授權的公開頁面:確認條款、robots.txt 與書面許可。RFC 9309要求成功取得 robots.txt 後遵守可解析規則,也明示該規則不是存取授權,不能取代合約、登入或存取控制。
住宅代理只做授權的地區驗證
住宅代理可用於已獲授權的品質驗證,例如核對公開頁面的語言、幣別、單位與房源範圍。它不授予資料權,也不應繞過 CAPTCHA、登入、403 或其他存取控制;HTTP 403即表示伺服器理解請求但拒絕履行。在供應商與目標網站實際支援的精度內,同一任務固定出口地區、會話、cookie 與語言設定;不同市場分開工作單元,並記錄實際條件,不能把城市定位視為絕對保證。
建立可更新、可追溯的資料管線
先低頻試跑並遵守速率限制;若 429 或 503 回應包含 Retry-After 就等待,否則採次數有限的指數退避加抖動。正式排程只查新增或變更範圍,最低資料模型包括:
| 欄位 | 用途 |
|---|---|
listing_key | 由 source_id 與 source_listing_id 組成命名空間鍵 |
| 地區欄位 | market、country、city、locale、currency、area_unit |
| 查詢上下文 | query_context 或 bbox,保存結果的產生條件 |
| 時間欄位 | source_updated_at(來源)、first_seen_at/last_seen_at(觀察窗)、observed_at(觀察)、ingested_at(入庫) |
content_hash | 排除抓取時間等易變欄位後識別內容版本 |
hash 未變只跳過新版內容寫入,仍須更新 last_seen_at,或寫入輕量 observation ledger/批次關聯,否則可能誤判下架。只有取得合法且可靠的物件識別碼時才建立 property_key;否則跨刊登比對應保存為可撤銷關係,連同規則版本、證據與信心分數,不直接覆蓋成同一住宅。單次未見先標記未觀察,待官方下架事件或多次授權觀察後轉為 inactive;保留最小墓碑記錄以免舊資料被當新品匯入。
公開資訊仍要做個資最小化
房源頁可能夾帶屋主、房仲或住戶的姓名、電話、精確住址與影像。先列明用途;不需聯絡個人,就不收電話、電郵或姓名。若處理活動適用 UK GDPR,ICO 資料最小化指引要求資料須充分、相關且限於必要,其保存限制指引要求設定可說明的期限、定期檢視,無需時刪除或匿名化;其他市場可將其作為治理基準,並依當地法規調整。實務上應記錄來源、授權版本、批次與欄位存取,建立更正/刪除工單,追蹤線上庫、衍生表與備份的處理結果,留下不含多餘個資的審計證據。
結語
可靠工程重點是來源優先、地區一致、增量更新與可追溯。住宅代理只是已授權的地區驗證工具;品質仍取決於授權、載入理解、穩定鍵與治理流程。