租窩 Zwoo — 租屋資料平台
將分散在不同來源的非結構化租屋資訊,自動整理成可搜尋、篩選及地圖瀏覽的房源平台。
正式營運GWP4 自有產品案例
本案例為 GWP4 自行開發的產品或研究專案,並非外部客戶委託案。列出的內容用於呈現實際技術能力與做法。
- 多來源資料蒐集
- LLM 結構化
- 地理資料
- 搜尋與篩選
- 會員及訂閱產品

背景與問題
租屋資訊散落在 PTT 租屋板、Facebook 地區社團等來源,格式完全不一致:有人用表格列出條件,有人寫成一整段文字,有人只放照片配一句話。要找房的人得在多個平台之間來回翻,很難掌握物件的地理分佈與價格區間。
原本的處理方式
使用者自行在各平台搜尋、逐則閱讀貼文、手動記錄有興趣的物件,再自己去地圖上確認位置與通勤距離。
設計目標
- 把非結構化貼文轉成可查詢的結構化欄位(租金、坪數、格局、地址)
- 用地圖呈現物件分佈,取代條列式清單的翻找
- 同一物件在多個來源重複張貼時要能去重
- 資料要能持續更新,而不是一次性匯入
解決方案
建立一條完整的資料管線:爬蟲從多個來源取得原始貼文,先存入原始資料庫保留完整內容,再交由 LLM 抽取結構化欄位,接著做地址正規化與 Geocoding(多個 Provider 互為備援),最後寫入可查詢的資料庫,由 Next.js 前端搭配 Google Maps 呈現。整條管線由排程工具定時執行,兩條 flow 各自處理不同來源。
核心功能
- 多來源貼文蒐集與原始資料保存
- LLM 欄位抽取(租金、坪數、格局、聯絡方式)
- 地址正規化與多 Provider Geocoding 容錯
- 重複物件偵測與去重
- 地圖瀏覽與區域篩選
- 條件搜尋與收藏
- 會員與訂閱機制
系統架構
爬蟲層(Python)→ 原始資料庫 → Pipeline(LLM 解析、Geocoding、去重、驗證)→ 結構化資料庫(PostgreSQL / PostGIS 地理查詢)→ API → Next.js + Google Maps 前端。排程以 Prefect 管理,兩條 flow 分別對應不同來源,各自每 12 小時執行。
技術選擇
- Python 爬蟲(Requests / BeautifulSoup / Playwright)
- LLM 結構化解析
- Prefect 排程
- MongoDB(原始貼文)
- PostgreSQL + PostGIS(地理查詢)
- Next.js + TypeScript
- @vis.gl/react-google-maps
開發過程與限制
- 來源貼文格式不可控,正規表達式無法涵蓋,因此改用 LLM 解析
- Geocoding 服務有配額與失敗率,需要多 Provider 互為備援
- 地圖 API 有成本考量,前端需控制請求次數與標記渲染量
- 同一物件重複張貼的判定沒有唯一鍵,需綜合多個欄位比對
可驗證指標
以下皆為可查證的技術事實,不含未經驗證的成效數字。
- 資料來源類型
- PTT 租屋板、Facebook 地區社團
- 管線執行頻率
- 兩條 flow,各每 12 小時執行
- 資料庫
- 原始資料與結構化資料分離儲存
- 上線狀態
- 正式營運中(zwoo.gwp4.com)
可以延伸到哪些產業
- 房仲與物件管理
- 二手商品與分類廣告
- 職缺與人力媒合
- 任何需要把社群貼文轉成結構化資料的產業