Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

PriceCompare

本專案是一個高效能的商品價格追蹤與比較系統,專為台灣電商(MOMO、PChome、Coupang、SOGI)的 Apple 產品設計。

採用現代化的 混合微服務架構 (Go + Python),結合 Go 的高併發 API 處理能力與 Python 強大的網頁爬蟲生態,並透過 Redis 進行非同步任務解耦。

系統架構

我們採用 Go (API 層) + Python (Worker 層) 的分離式架構,解決傳統爬蟲系統中「抓取卡住 API」的效能瓶頸。

graph TD
    User[使用者 (Browser)] -->|HTTP GET/POST| Nginx[前端 (Next.js)]
    Nginx -->|API Request| GoAPI[後端 API (Go/Gin)]
    
    subgraph "Core Backend (Go)"
        GoAPI -->|Read/Write| DB[(PostgreSQL)]
        GoAPI -->|Push Task| Redis[(Redis Queue)]
    end
    
    subgraph "Worker Cluster (Python)"
        PyWorker[Python Worker] -->|BRPOP Task| Redis
        PyWorker -->|Scrape| Web[電商網站 (MOMO/PChome...)]
        PyWorker -->|Save Result| DB
    end
Loading

核心組件

  1. Frontend (Next.js): 提供使用者介面,顯示價格比較表與趨勢圖。
  2. Backend API (Go):
    • 極速回應產品列表與價格查詢。
    • 負責接收爬蟲請求並派發至 Redis。
    • Port: 8080
  3. Scraper Worker (Python):
    • 背景執行,監聽 Redis scrape_queue。
    • 使用 Playwright 驅動瀏覽器進行動態網頁爬取。
    • Port: 無 (僅背景執行)
  4. Database: PostgreSQL 儲存產品與歷史價格。
  5. Queue: Redis 負責任務佇列與快取。

主要功能

  • 極速查詢: Go API 提供毫秒級的產品列表與最新價格查詢。
  • 非同步爬蟲: 觸發爬蟲後立即回應,不會阻塞介面;後台 Python Worker 自動排程執行。
  • 多平台支援:
    • MOMO (含優惠券偵測)
    • PChome
    • Coupang (含回饋金偵測)
    • SOGI 手機王
  • 智能過濾: 自動保留每個平台最新的一筆價格,過濾重複數據。

快速開始

前置需求

  • Docker Desktop (建議開啟)
  • Git

安裝與啟動

本專案已完全容器化,只需一個指令即可啟動所有服務。

  1. Clone 專案

    git clone <repository-url>
    cd PriceCompare
  2. 設定環境變數

    cp scraper-worker/.env.example scraper-worker/.env
    cp frontend/.env.example frontend/.env
    # 注意:backend-go 會共用 scraper-worker/.env 的設定
  3. 啟動系統 (Docker Compose)

    docker-compose up -d --build

    這會自動下載 Go/Python 映像檔、安裝 Playwright 瀏覽器、並啟動 DB 與 Redis。

  4. 訪問服務

如何觸發爬蟲?

你可以透過 API 手動觸發爬蟲任務:

# 爬取所有商品
curl -X POST http://localhost:8080/api/prices/scrape -d '{"product_ids": []}'

# 指定爬取特定商品 (ID: 1)
curl -X POST http://localhost:8080/api/prices/scrape -d '{"product_ids": [1]}'

查看爬蟲進度 (查看 Worker 日誌):

docker logs -f pricecompare_backend_python_worker

遠端訪問指南 (家人使用情境)

如果你希望在公司電腦(或讓家人)訪問家中運行的服務,推薦使用 Cloudflare Tunnel。這是一個免費、安全且不需要設定路由器的方案。

前提: 你的 Mac 電腦必須開機,且 Docker 服務正在運行 (docker-compose up -d)。

步驟 1: 安裝 Cloudflared (只需做一次)

打開終端機 (Terminal),執行以下指令:

brew install cloudflared

步驟 2: 啟動分享 (每次要用時執行)

當家人需要使用時,在終端機執行:

cloudflared tunnel --url http://localhost:3000

步驟 3: 取得網址

執行後,終端機畫面會顯示一個框框,裡面有一個隨機產生的網址,例如: https://lazy-fox-jumps.trycloudflare.com

將這個網址複製傳給家人,他們就可以直接打開使用了!

注意:每次重新執行指令,網址都會變動。使用完畢後,在終端機按 Ctrl + C 即可關閉分享。

日常使用與維護

1. 重新啟動服務

每當電腦重啟或需要重新啟動系統時,請在專案根目錄執行以下指令。我們建議開啟多個 Worker 以大幅提升爬取速度:

# 啟動核心服務,並同時開啟 4 個爬蟲 Worker
  docker-compose up -d --build --scale backend-python-worker=4

2. 開放給家人使用 (遠端訪問)

若要讓家人在公司或戶外使用,請在 Docker 啟動狀態下執行:

cloudflared tunnel --url http://localhost:3000

執行後請尋找終端機顯示的隨機網址(例如 https://your-unique-id.trycloudflare.com)並分享給家人。家人用畢後,在終端機按 Ctrl + C 即可關閉通道。

3. 監控爬蟲狀態

若需確認背景抓取是否正常運作,可查看 Worker 的即時日誌:

# 查看 1 號爬蟲的執行狀況
docker logs -f pricecompare-backend-python-worker-1

開發者指南

  • Go 程式碼: 位於 backend-go/。修改後需 docker-compose up -d --build backend-go。
  • Python 爬蟲: 位於 scraper-worker/app/scrapers/。修改後需 docker-compose up -d --build backend-python-worker。
  • 前端: 位於 frontend/。支援熱重載,修改後重新整理瀏覽器即可。

資料庫結構

  • products: 產品基本資料 (Model, Capacity, Official Price)。
  • prices: 歷史價格紀錄 (Price, Retailer, Stock Status)。
  • retailers: 電商平台列表。

授權

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages