feef7b63d0a78e26a5695ea2f3e1dab41abf35610b2687cac02a61c0a1c18db5
ashare-data
A股数据抓取工具,使用 AKShare 获取数据,保存到 MySQL 数据库。
功能概览
| 数据类型 | 说明 | 数据来源 |
|---|---|---|
| 股票列表 | A股全部股票代码和名称 | 东方财富 |
| 日线行情 | 开盘价、收盘价、最高价、最低价、成交量、成交额、涨跌幅等(前复权) | 东方财富 |
| 财务报表 | 利润表、资产负债表、现金流量表 | 新浪财经 |
| 资金流向 | 主力/超大/大/中/小单净流入及占比 | 东方财富 |
| 龙虎榜 | 上榜股票、买入卖出金额、上榜原因 | 东方财富 |
| 分红送转 | 每10股送转、派息、股息率等 | 巨潮资讯 |
快速开始
1. 环境要求
- Python >= 3.10
- MySQL >= 5.7(建议 8.0+)
2. 安装依赖
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/Mac
pip install -r requirements.txt
3. 配置数据库
复制配置文件并修改 MySQL 连接信息:
cp config.example.yaml config.yaml
编辑 config.yaml,填写你的 MySQL 连接信息:
mysql:
host: "localhost"
port: 3306
user: "root"
password: "your_password"
database: "ashare"
charset: "utf8mb4"
fetch:
delay: 0.5 # 请求间隔(秒),防止被限流
retry: 3 # 失败重试次数
确保 MySQL 中已创建对应数据库:
CREATE DATABASE ashare CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 运行
# 先抓取股票列表(其他模块依赖此数据)
python -m src.main --stock-list
# 抓取最近30天的日线行情
python -m src.main --daily
# 指定日期范围抓取日线
python -m src.main --daily --start-date 20260430 --end-date 20260508
# 抓取财务报表(全部股票)
python -m src.main --financial
# 抓取单只股票的财务数据
python -m src.main --financial --symbol 000001
# 抓取资金流向
python -m src.main --money-flow
# 抓取最近30天的龙虎榜
python -m src.main --dragon-tiger
# 指定日期范围抓取龙虎榜
python -m src.main --dragon-tiger --start-date 20260423 --end-date 20250509
# 抓取分红送转
python -m src.main --dividend
# 全量抓取所有数据
python -m src.main --all
5. 命令行参数说明
usage: main.py [-h] [--stock-list] [--daily] [--financial] [--money-flow]
[--dragon-tiger] [--dividend] [--all]
[--start-date START_DATE] [--end-date END_DATE]
[--symbol SYMBOL]
选项:
--stock-list 抓取A股股票列表
--daily 抓取日线行情
--financial 抓取财务报表(利润表、资产负债表、现金流量表)
--money-flow 抓取个股资金流向
--dragon-tiger 抓取龙虎榜数据
--dividend 抓取分红送转数据
--all 全量抓取以上所有数据
日期过滤(仅对日线行情和龙虎榜生效):
--start-date 开始日期,格式 YYYYMMDD,默认30天前
--end-date 结束日期,格式 YYYYMMDD,默认今天
股票过滤(仅对财务报表和分红送转生效):
--symbol 指定单只股票代码,如 000001,默认全部股票
数据库表结构
stock_info — 股票基本信息
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) PK | 股票代码 |
| name | VARCHAR(50) | 股票名称 |
stock_daily — 日线行情(前复权)
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| date | DATE | 交易日期 |
| open | FLOAT | 开盘价 |
| close | FLOAT | 收盘价 |
| high | FLOAT | 最高价 |
| low | FLOAT | 最低价 |
| volume | FLOAT | 成交量 |
| turnover | FLOAT | 成交额 |
| amplitude | FLOAT | 振幅% |
| pct_change | FLOAT | 涨跌幅% |
| change | FLOAT | 涨跌额 |
| turnover_rate | FLOAT | 换手率% |
联合主键:(code, date)
stock_financial_income — 利润表
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| report_date | VARCHAR(20) | 报告期 |
| data | TEXT | JSON格式利润表数据 |
联合主键:(code, report_date)
stock_financial_balance — 资产负债表
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| report_date | VARCHAR(20) | 报告期 |
| data | TEXT | JSON格式资产负债表数据 |
联合主键:(code, report_date)
stock_financial_cashflow — 现金流量表
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| report_date | VARCHAR(20) | 报告期 |
| data | TEXT | JSON格式现金流量表数据 |
联合主键:(code, report_date)
stock_money_flow — 个股资金流向
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| date | DATE | 日期 |
| close | FLOAT | 收盘价 |
| pct_change | FLOAT | 涨跌幅% |
| main_net_inflow | FLOAT | 主力净流入-净额 |
| main_net_pct | FLOAT | 主力净流入-净占比 |
| huge_net_inflow | FLOAT | 超大盘净流入-净额 |
| huge_net_pct | FLOAT | 超大盘净流入-净占比 |
| big_net_inflow | FLOAT | 大盘净流入-净额 |
| big_net_pct | FLOAT | 大盘净流入-净占比 |
| mid_net_inflow | FLOAT | 中盘净流入-净额 |
| mid_net_pct | FLOAT | 中盘净流入-净占比 |
| small_net_inflow | FLOAT | 小盘净流入-净额 |
| small_net_pct | FLOAT | 小盘净流入-净占比 |
联合主键:(code, date)
stock_dragon_tiger — 龙虎榜
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| name | VARCHAR(50) | 股票名称 |
| date | DATE | 上榜日期 |
| close | FLOAT | 收盘价 |
| pct_change | FLOAT | 涨跌幅% |
| reason | VARCHAR(200) | 上榜原因 |
| buy_amount | FLOAT | 买入额 |
| sell_amount | FLOAT | 卖出额 |
| net_amount | FLOAT | 净额 |
联合主键:(code, date)
stock_dividend — 分红送转
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(10) | 股票代码 |
| name | VARCHAR(50) | 股票名称 |
| report_date | VARCHAR(20) | 报告期 |
| dividend_date | DATE | 除权除息日 |
| bonus_ratio | FLOAT | 每10股送转比例 |
| cash_div | FLOAT | 每10股派息 |
| convert_ratio | FLOAT | 每10股转增比例 |
| ex_right_date | DATE | 除权日 |
| dividend_yield | FLOAT | 股息率% |
联合主键:(code, report_date)
项目结构
ashare-data/
├── config.example.yaml # 配置文件模板
├── config.yaml # 实际配置(含密码,已加入.gitignore)
├── pyproject.toml # 项目元数据
├── requirements.txt # Python依赖
├── src/
│ ├── __init__.py
│ ├── config.py # 配置读取模块
│ ├── db.py # 数据库模型与连接管理
│ ├── main.py # 命令行入口
│ └── fetchers/
│ ├── __init__.py
│ ├── stock_list.py # 股票列表抓取
│ ├── daily.py # 日线行情抓取
│ ├── financial.py # 财务报表抓取
│ ├── money_flow.py # 资金流向抓取
│ ├── dragon_tiger.py # 龙虎榜抓取
│ └── dividend.py # 分红送转抓取
└── README.md
设计说明
- 去重写入:所有表使用
INSERT ON DUPLICATE KEY UPDATE(upsert),重复执行不会产生重复数据 - 自动重试:网络请求失败自动重试(默认3次),单只股票失败不影响整体
- 限速保护:请求间自动延迟(默认0.5秒),防止被数据源限流
- 增量更新:日线行情和龙虎榜支持通过
--start-date/--end-date指定日期范围 - 懒加载导入:各fetcher模块按需导入,未使用的模块不会加载
Languages
Python
100%