# future_data **Repository Path**: hflhhb/future_data ## Basic Information - **Project Name**: future_data - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-08 - **Last Updated**: 2026-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 上期所期货数据抓取与展示系统 ## 项目简介 本项目是一个完整的上海期货交易所期货库存数据抓取与展示系统,包括: - **服务端爬虫**:定时自动抓取上期所期货库存数据 - **RESTful API**:提供数据查询和管理接口 - **前端展示**:可视化展示期货数据和趋势图表 - **Excel 导出**:支持按产品导出数据到 Excel ## 项目结构 ``` future_data/ ├── server/ # 服务端 │ ├── api/ # API 接口 │ ├── crawler/ # 爬虫模块 │ ├── db/ # 数据库模块 │ ├── utils/ # 工具模块 │ ├── config/ # 配置文件 │ ├── logs/ # 日志目录 │ ├── requirements.txt # Python 依赖 │ ├── Dockerfile # Docker 构建文件 │ └── run.py # 启动脚本 ├── web/ # 前端 │ ├── src/ │ │ ├── api/ # API 请求 │ │ ├── views/ # 页面组件 │ │ ├── components/ # 公共组件 │ │ └── utils/ # 工具函数 │ ├── package.json # npm 依赖 │ ├── Dockerfile # Docker 构建文件 │ └── nginx.conf # Nginx 配置 ├── docker-compose.yml # Docker 编排文件 └── README.md # 项目文档 ``` ## 技术栈 ### 服务端 - Python 3.12+ - FastAPI - Web 框架 - SQLite - 数据库 - APScheduler - 定时任务 - Requests + BeautifulSoup - 爬虫 ### 前端 - Vue 3.5+ - 前端框架 - Vite 5.4+ - 构建工具 - Element Plus 2.8+ - UI 组件库 - ECharts 5.5+ - 图表库 ## 快速开始 ### 使用 Docker 一键启动 ```bash # 克隆项目 git clone cd future_data # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` 服务启动后: - 前端访问:http://localhost - 后端 API:http://localhost:8000 - API 文档:http://localhost:8000/docs ### 手动部署 #### 1. 启动服务端 ```bash cd server # 安装依赖 pip install -r requirements.txt # 配置文件 编辑 config/config.ini # 启动服务 python run.py ``` #### 2. 启动前端 ```bash cd web # 安装依赖 npm install # 开发模式 npm run dev # 生产构建 npm run build ``` ## 配置说明 ### 服务端配置 (server/config/config.ini) ```ini [server] host = 0.0.0.0 port = 8000 debug = false [database] path = server/db/futures_data.db [crawler] base_url = https://www.shfe.com.cn/data/tradedata/future/stockdata/dailystock start_hour = 15 # 开始爬取的小时 interval_minutes = 10 # 轮询间隔(分钟) timeout = 30 # 请求超时时间(秒) force_update = false # 是否强制更新 [email] enabled = true smtp_server = smtp.qq.com smtp_port = 587 smtp_username = your_email@qq.com smtp_password = your_password from_addr = your_email@qq.com to_addrs = recipient@example.com [logging] level = INFO format = %(asctime)s - %(name)s - %(levelname)s - %(message)s file = logs/crawler.log ``` ## 功能说明 ### 爬虫功能 - 每天15:00开始,每10分钟轮询一次 - 成功爬取数据后停止当日轮询 - 失败持续到次日9:00发送邮件通知 - 支持手动爬取指定日期数据 - 支持范围爬取历史数据 ### API 接口 - `GET /api/futures-products` - 获取所有期货产品 - `GET /api/futures-data` - 获取期货数据 - `POST /api/crawl` - 爬取指定日期数据 - `POST /api/crawl/range` - 爬取日期范围数据 ### 前端功能 - 仪表盘:统计数据展示 - 筛选:按日期和产品筛选 - 详情页:趋势图表展示 - 导出:Excel 数据导出 ## 命令行使用 ### 手动爬取数据 ```bash # 爬取今天的数据 cd server python run.py --date today # 爬取指定日期的数据 python run.py --date 20260109 # 强制更新今天的数据 python run.py --date today --force-update # 爬取日期范围的数据 python run.py --start-date 20260101 --end-date 20260110 ``` ### 通过 API 爬取 ```bash # 爬取今天的数据 curl -X POST http://localhost:8000/api/crawl # 爬取指定日期的数据 curl -X POST http://localhost:8000/api/crawl \ -H "Content-Type: application/json" \ -d '{"date": "20260109"}' # 爬取日期范围的数据 curl -X POST http://localhost:8000/api/crawl/range \ -H "Content-Type: application/json" \ -d '{"start_date": "20260101", "end_date": "20260110"}' ``` ## 数据库说明 ### futures_products 表 - id: 主键 - product: 产品名称 - unit: 单位 - created_at: 创建时间 - updated_at: 更新时间 ### futures_data_daily 表 - id: 主键 - date: 日期 - product: 产品名称 - unit: 单位 - futures_value: 期货值 - change_value: 增减值 - created_at: 创建时间 - updated_at: 更新时间 ## 注意事项 1. 首次运行会自动创建数据库和表结构 2. 修改配置后需要重启服务生效 3. 确保 Docker 运行时网络正常 4. 邮件通知需要配置正确的 SMTP 信息 5. 日志文件会自动轮转,最多保留5个备份 ## 开发说明 ### 服务端开发 ```bash cd server pip install -r requirements.txt python run.py --reload ``` ### 前端开发 ```bash cd web npm install npm run dev ``` ## 许可证 MIT License