feat(openinsider): 新增 OpenInsider 內部人交易爬蟲,支援多標的與每日排程

- 新增 app/crawlers/openinsider.py,來源 http://openinsider.com/search?q={symbol}

- 支援多標的:以 SYMBOLS=PLTR,NVDA,... 同時追多檔(或使用 SYMBOL 單一)

- runner: 多實例排程與啟動;/check 會依序觸發全部爬蟲

- API: /info、/stats、/check、/notify_test 支援多爬蟲回應

- config/base: 新增 RUN_DAILY_AT 每日固定時間;未設定則用 CHECK_INTERVAL

- notifications: 新增 send_custom_email、send_text_webhook、send_text_discord

- README 與 .env.template 更新;.env 改為 CRAWLER_TYPE=openinsider

- 移除 quiver_insiders 爬蟲與相關設定

BREAKING CHANGE: 不再支援 CRAWLER_TYPE=quiver_insiders;請改用 openinsider。
This commit is contained in:
2025-09-04 22:32:29 +08:00
parent 58cc979b5b
commit e89567643b
8 changed files with 368 additions and 40 deletions

View File

@@ -1,14 +1,16 @@
# Barron's 股票推薦爬蟲(模組化架構)
# 股票爬蟲服務(模組化架構)
一個可擴充的爬蟲服務,內建 HTTP API 與多種通知Email/Webhook/Discord
現已模組化API 與爬蟲核心分離,便於未來新增其他網站的爬蟲。
可擴充的股票爬蟲服務,內建 HTTP API 與多種通知Email/Webhook/Discord
目前提供兩類爬蟲:
- Barron's 股票推薦
- OpenInsider 內部人交易(支援多標的)
## 功能
- 定時抓取 Barron's 股票推薦頁面
- 定時抓取(支援每 N 秒或每日固定時間)
- 只在有新內容時發送通知(可設定首次啟動也通知)
- 內建 `/health``/stats``/check``/notify_test` API
- 內建 `/health``/info``/stats``/check``/notify_test` API
- Docker 化部署,資料與日誌可持久化
- 架構模組化,易於擴充其他站點
- 架構模組化,日後可擴充其他站點
## 專案結構
```
@@ -18,6 +20,7 @@ app/
api/server.py # Flask API
crawlers/base.py # BaseCrawler通用排程/比對/通知
crawlers/barrons.py # Barrons 爬蟲
crawlers/openinsider.py # OpenInsider 內部人交易爬蟲(多標的)
crawlers/template.py # 新站點範本(複製後改名擴充)
services/storage.py # JSON 儲存
services/notifications.py # Email/Webhook/Discord
@@ -60,7 +63,8 @@ python enhanced_crawler.py
## 環境變數說明
- 基本
- `CHECK_INTERVAL`: 檢查間隔(秒),預設 300
- `CHECK_INTERVAL`: 檢查間隔(秒),預設 300(若設定了 `RUN_DAILY_AT` 則忽略)
- `RUN_DAILY_AT`: 每天固定時間(例如 `12:00`),使用容器本機時區
- `LOG_LEVEL`: 日誌等級,預設 `INFO`(可 `DEBUG`
- `ALWAYS_NOTIFY_ON_STARTUP`: 是否在啟動後第一次就寄出目前清單true/false預設 false
- Email可選
@@ -75,14 +79,22 @@ python enhanced_crawler.py
- `DATA_DIR`: 資料輸出路徑Docker 預設 `/app/data`;本機預設 `./data`
- `LOG_DIR`: 日誌輸出路徑Docker 預設 `/app/logs`;本機預設 `./logs`
- 爬蟲選擇與參數
- `CRAWLER_TYPE`: `barrons` | `openinsider`
- Barron's無額外參數
- OpenInsider
- 單一標的:`SYMBOL=PLTR`
- 多個標的:`SYMBOLS=PLTR,NVDA,TSLA`
Email 使用建議:
- Gmail 請使用「應用程式密碼」並開啟兩步驟驗證
- 校園/企業信箱請向管理者確認 SMTP 主機、連接埠與加密方式
## Web API 端點
- `GET /health`: 健康檢查
- `GET /stats`: 目前統計資訊(啟動時間、檢查次數、錯誤數…
- `GET /check`: 立即執行一次檢查
- `GET /info`: 當前爬蟲資訊(多實例時回傳陣列
- `GET /stats`: 目前統計資訊(單實例為物件,多實例為 map
- `GET /check`: 立即執行一次檢查(多實例會對每個爬蟲都執行)
- `GET /notify_test?channel=email|webhook|discord`: 測試通知
## 健康檢查與維運
@@ -102,6 +114,7 @@ docker-compose down
- `last_update`: ISO 時間
- `stock_picks`: 文章清單title/link/hash/scraped_at
- `stats`: 執行統計
- OpenInsider 多標的:`data/openinsider_<SYMBOL>.json`
## 擴充新站點(建議流程)
1) 複製範本:`app/crawlers/template.py``app/crawlers/<your_site>.py`
@@ -115,7 +128,8 @@ docker-compose down
## 故障排除
- 取不到網頁檢查網路、User-Agent、目標網站是否改版
- Email 失敗:確認 SMTP 設定、應用程式密碼、連接埠與加密方式
- 解析不到內容:查看日誌,更新選擇器邏輯
- Barron's 解析不到內容:查看日誌,更新選擇器邏輯
- OpenInsider 解析不到內容:檢查 `SYMBOL/SYMBOLS` 是否正確,觀察是否被站方限流
- 服務無回應:檢查容器日誌與健康檢查狀態
## 安全建議
@@ -124,5 +138,6 @@ docker-compose down
- 若對外開放 API建議加上認證與 HTTPS
## 版本記事
- 2025-09重構為模組化架構API 與爬蟲邏輯分離,新增擴充範本
- 2025-09
- 重構為模組化架構API 與爬蟲邏輯分離
- 新增 OpenInsider 內部人交易爬蟲與多標的支援