2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00
2026-05-10 00:35:59 +08:00

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模块按需导入,未使用的模块不会加载
S
Description
保存A股数据
Readme
336 KiB
Languages
Python 100%