基于 AKShare 的 A 股行情批量采集工具,支持分钟线、实时行情,内置代理轮转 + MongoDB 存储 + 定时调度,解决RemoteDisconnected问题。
akshare-stock-data-fetcher
基于 AKShare 的 A 股行情数据批量采集工具,支持分钟线历史数据、实时行情快照,内置代理轮转、MongoDB 持久化存储与定时调度,开箱即用。
English | 中文
✨ Features
- 分钟线历史数据:批量抓取全市场 A 股 5 分钟 K 线,多进程并行 + 超时自动重试
- 实时行情快照:定时抓取
stockzhaspotem全量行情,自动写入 MongoDB - 代理轮转:内置健壮的代理池管理,支持多代理轮转 + 直连兜底,彻底解决 AKShare 被限频/封 IP 问题
- 交易日判断:自动跳过非交易日,无需手动维护日历
- 股票代码同步:每日自动更新全量股票代码到本地文件
- 定时调度:基于
schedule库,支持任意时间点触发
📁 Project Structure
akshare-stock-data-fetcher/
├── getstockcodeeveryday.py # 每日同步全量股票代码到 stock_codes.txt
├── stockzhahistmin_em.py # 批量抓取分钟线历史数据 → MongoDB(多进程 + 重试)
├── stockzhaspotem.py # 定时抓取实时行情快照 → MongoDB(基础代理版)
├── stockzhaspotemproxystrength.py # 定时抓取实时行情快照 → MongoDB(强代理轮转版)
├── utils.py # 代理获取 & 通用工具(分钟线专用)
├── utils_spot.py # 代理获取 & 通用工具(实时行情专用)
├── utils_spot1.py # 精简版代理工具
├── stock_codes.txt # 全量 A 股代码(运行后自动生成)
└── requirements.txt
🚀 Quick Start
1. 安装依赖
pip install -r requirements.txt
2. 配置代理(可选但强烈推荐)
在 utils.py / utilsspot.py / utilsspot1.py 中,将以下占位符替换为你自己的代理 API 地址:
proxy_ips = requests.get('代理ip获取地址').text
推荐使用按量付费的动态住宅代理(如 极量IP、快代理 等),返回格式为 ip:port:user:password。
>
如果不使用代理,stockzhaspotemproxystrength.py的buildrotatingget中已内置include_direct=True直连兜底,可在低频场景下直接使用。
3. 配置 MongoDB
在各主脚本的 main 块中填入你的 MongoDB 连接信息:
client = MongoClient('mongodb://localhost:27017/')
db = client['stock_data']
4. 同步股票代码
python getstockcodeeveryday.py
生成 stock_codes.txt,供分钟线抓取脚本使用。
5. 抓取分钟线历史数据
python stockzhahistmin_em.py
默认每天 16:00 触发,抓取全市场当日 5 分钟 K 线并存入 MongoDB,支持失败自动重试(默认重试 6 次)。
6. 抓取实时行情快照
基础版(简单代理):
python stockzhaspotem.py
强代理轮转版(推荐用于生产环境):
python stockzhaspotemproxystrength.py
默认每天 15:50 触发。
⚙️ Configuration
| 参数 | 位置 | 说明 | |------|------|------| | numworkers | stockzhahistminem.py | 并行进程数,默认 32,按机器性能调整 | | maxtimeout | scheduledtask() | 单只股票最长处理时间(秒),默认 30 | | maxretries | scheduledtask() | 失败重试次数,默认 6 | | totalakretries | stockzhaspotemproxystrength.py | AKShare 调用重试次数,默认 3 | | schedule time | 各主脚本 main | 定时触发时间,按需修改 |
🔧 Why Proxy?
AKShare 底层直接请求东财等数据源,高频批量请求容易触发限流(429)或封 IP。本项目的代理方案:
- 请求前动态从代理 API 获取最新 IP
- 多代理顺序轮转,失败自动切换
- 支持直连兜底(
include_direct=True) - 内置
urllib3.Retry应对 429/5xx 自动退避重试 - 使用
unittest.mock.patch无侵入地替换 AKShare 内部的requests.get,无需修改 AKShare 源码
📦 Dependencies
📄 License
MIT License. See LICENSE for details.
中文说明
解决了什么问题?
使用 AKShare 批量拉取数据时,大家最常遇到的痛点:
- 被限速 / 封 IP:大批量请求东财接口,很快触发 429 或连接超时
- 无法定时自动化:需要手动判断交易日、手动触发
- 进程超时卡死:部分股票请求长时间无响应,导致整个批次阻塞
- 数据重复/丢失:没有 upsert 逻辑,重跑时要么报错要么数据混乱
贡献 / 问题反馈
欢迎提 Issue 或 PR!如果这个项目对你有帮助,请给个 ⭐️ 支持一下。