自动抓取化工品(硫磺、硫酸)及农副大宗商品(大豆、玉米、小麦、棉花、白糖、豆粕)的现货价格与国内外期货行情,生成可视化报告页面,支持页面内配置定时任务。
price-hub/
├── README.md # 本文件
├── requirements.txt # Python 依赖
├── docs/
│ └── architecture.md # 架构文档(含数据流图)
├── src/
│ ├── scrapers/
│ │ ├── base.py # 基础 HTTP 工具
│ │ ├── chemicals.py # 化工品抓取(硫磺、硫酸)
│ │ ├── agriculture.py # 农副品抓取(大豆、玉米、小麦等)
│ │ └── futures.py # 期货行情抓取(国内+国际)
│ ├── update_prices.py # 主更新脚本
│ └── server.py # Web 服务 + 定时任务引擎
├── data/ # 运行时数据(自动生成)
│ ├── spot_prices.json # 现货历史
│ ├── futures_prices.json # 期货历史
│ ├── scheduler_config.json # 定时任务配置
│ └── update.log # 运行日志
└── web/
└── index.html # 前端报告页面(单文件)
pip install -r requirements.txt
python src/update_prices.py
python src/server.py
浏览器访问 http://localhost:8080 即可查看报告。
| 类型 | 数据源 | 说明 |
|---|---|---|
| 化工现货 | 生意社 / 百川盈孚 | 优先生意社,回退百川盈孚 |
| 农副现货 | 生意社 / 百川盈孚 | 同上 |
| 国内期货 | 新浪财经期货接口 | 大商所 / 郑商所主力合约 |
| 国际期货 | 新浪财经外盘接口 | CBOT / ICE 行情 |
在页面底部「定时任务」区域,可直接:
| 表达式 | 含义 |
|---|---|
0 9 * * * | 每天 9:00 |
0 9,18 * * * | 每天 9:00 和 18:00 |
0 9 * * 1-5 | 工作日 9:00 |
*/30 9-17 * * 1-5 | 工作日 9:00-17:00 每30分钟 |
如果只需要定时抓取数据,可使用系统 crontab:
# 编辑 crontab
crontab -e
# 每天 9:00 执行(请替换路径)
0 9 * * * /usr/bin/python3 /path/to/price-hub/src/update_prices.py >> /path/to/price-hub/data/update.log 2>&1
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
# 首次抓取
RUN python src/update_prices.py || true
EXPOSE 8080
CMD ["python", "src/server.py"]
git clone https://cnb.cool/table-link/public/price-hub.git
cd price-hub
pip install -r requirements.txt
python src/update_prices.py # 首次抓取
nohup python src/server.py & # 后台运行
建议配合 systemd 或 supervisor 管理进程。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/scheduler | 获取定时任务列表 |
| PUT | /api/scheduler/job | 新增/更新任务 |
| DELETE | /api/scheduler/job/<id> | 删除任务 |
| POST | /api/run | 手动触发更新 |
| GET | /api/logs | 获取运行日志 |
| GET | /api/data/spot | 获取现货历史 JSON |
| GET | /api/data/futures | 获取期货历史 JSON |
MIT License