一套圍繞內政部戶政司門牌查詢的資料系統:自動化爬取門牌異動資料、 提供查詢 API、收集 Log 並在異常時自動通報,並以容器排程定期更新資料。
爬取(試題一) → 落地共用 SQLite → 查詢 API(試題二)
│
共用 Log → 收集/儲存/檢視 → 異常通報(試題三)
▲
定期觸發爬蟲(加分題)
完整多視角架構圖見 試題四:系統架構圖。
| 題目 | 子系統 | 技術 | 說明 |
|---|---|---|---|
| 試題一 | 門牌爬蟲 | Selenium · Chromium · ddddocr · OpenCV | 抓門牌異動、驗證碼自動辨識,落地 SQLite/CSV |
| 試題二 | 查詢 API | FastAPI · uvicorn · aiosqlite | 唯讀查詢 API(POST /query、/health、/docs) |
| 試題三 | Log 收集與異常通報 | Docker Compose · Loki · Promtail · Grafana | 即時/歷史 Log 檢視 + 平台偵測 → webhook 通報 |
| 試題四 | 系統架構圖 | Mermaid | 總覽/部署/資料流/資料模型/設計取捨 |
| 額外 | 自動化排程 | Ofelia(Docker 原生) | 定時起新容器跑全量抓取,結果同進監控 |
用 試題三 的 docker compose 同時拉起爬蟲、API、Log 收集、監控與通報:
cd 試題三
docker compose up --build| 服務 | 網址 | 用途 |
|---|---|---|
| 查詢 API | http://localhost:8000/docs | 互動式 API 文件,可直接試打 |
| Grafana | http://localhost:3000 | 維運 Dashboard 與告警(匿名登入) |
| 通報紀錄 | http://localhost:9000 | 異常通報落地查詢 |
各題目錄內附獨立 README 與 requirements.txt,可單獨執行:
# 試題一:爬取大安區(驗證碼自動辨識)
cd 試題一
pip install -r requirements.txt
python .\main.py --captcha auto --areas 大安區
# 試題二:啟動查詢 API(讀試題一產出的 DB)
cd ..\試題二
pip install -r requirements.txt
$env:DB_PATH = "..\試題一\data\doorplate.sqlite3"
uvicorn app.main:app --port 8000示範畫面與檔案,彙整於 docs/README.md。
| 請提供項目 | 位置 |
|---|---|
| 完整程式碼 | 試題一、試題二、試題三 |
| 示範執行結果 CSV | 試題一/data/verify/ |
| 示範 API 執行結果 | docs/README.md |
| LOG 與通報紀錄 | docs/README.md |
| 系統架構圖 | 試題四 |
| 排程設計 | 試題三 — 自動化排程 |
| 自動驗證碼 ocr 優化 | 試題一 — OCR 優化報告 |
- 共用資料層解耦:爬蟲寫、API 唯讀同一份 SQLite;所有服務寫同一份 Log,靠 named volume 串接,無直接程式相依。
- 驗證碼自動辨識:ddddocr + Otsu 前處理 + 5 碼閘門 + 失敗自動重試/降級人工;進階可開多變體與 beam CTC 解碼(3次重試可達 99% 成功率,詳見OCR 優化報告)。
- 平台偵測為主的異常通報:應用只負責寫結構化 Log,由 Grafana 以 LogQL 統一偵測。
- Python 3.10+(單獨跑各題)。
- Docker 與 Docker Compose(方式 A 整套平台,建議 Linux 環境)。
- 試題一在 Windows 跑
--captcha auto需 VC++ 執行庫(onnxruntime 相依),細節見試題一 README。