by 雪隐 from juejin.cn/user/143341…
文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权
AkShare 金融数据获取教程
本文介绍如何使用 AkShare 获取三类常用金融数据:财务数据、日线数据、分钟数据。以宁德时代(300750)为例,演示完整的数据获取流程。
目录
环境准备
由于这个专栏不是python教学。麻烦大家自己去了解python相关,如果什么都要从初级开始写,可能篇幅会很大。并且,现在有了AI,所有的代码理解起来并不是那么困难,大家可以通过各种web端的AI,来辅助大家。
这里我推荐大家在自己的机器上安装miniconda, 请参照安装指南,因为如果东西多了以后,可能会发生依赖不兼容的情况。
安装完成以后,请执行下面的命令,我一般习惯用python=3.10或者3.11,这2个版本对大模型的兼容性较好。
conda create -n stock_assistant python=3.10 -y
conda activate stock_assistant
pip install akshare pandas
财务数据获取
功能说明
通过 stock_financial_report_sina() 获取三大财务报表(利润表、资产负债表、现金流量表),再自行计算常用财务指标。
适用场景:需要从原始报表提取特定指标,或做自定义财务分析。
核心代码
import akshare as ak
STOCK_CODE_SINA = 'sh300750' # 新浪格式:sh/sz + 代码
# 获取利润表
df_income = ak.stock_financial_report_sina(stock=STOCK_CODE_SINA, symbol="利润表")
# 获取资产负债表
df_balance = ak.stock_financial_report_sina(stock=STOCK_CODE_SINA, symbol="资产负债表")
# 获取现金流量表
df_cashflow = ak.stock_financial_report_sina(stock=STOCK_CODE_SINA, symbol="现金流量表")
接口参数
| 参数 | 说明 | 示例 |
|---|---|---|
stock | 股票代码(新浪格式) | 'sh300750'、'sz000858' |
symbol | 报表类型 | "利润表"、"资产负债表"、"现金流量表" |
返回数据
- 每只股票的全部历史报告期数据
- 列名:中文学段名(如"营业总收入"、"净利润"等)
- 时间范围通常从IPO至今
数据处理
AkShare 返回的是原始报表,字段名存在中英文混用、版本差异等问题,需要做字段映射:
def get_col(row, col_names):
"""从行中获取字段值,支持模糊匹配"""
for name in col_names:
if name in row.index:
val = safe_float(row[name])
if val is not None:
return val
# 模糊匹配:列名包含关键字即匹配
for col in row.index:
if name in str(col):
return safe_float(row[col])
return None
def safe_float(val):
if val is None or str(val).strip() in ('', '--', 'None', 'nan'):
return None
try:
return float(val)
except:
return None
财务指标计算示例
# 盈利能力
grossprofit_margin = round((revenue - operating_cost) / revenue * 100, 2)
netprofit_margin = safe_divide(net_profit, revenue, pct=True)
roe = safe_divide(net_profit, total_equity, pct=True)
roa = safe_divide(net_profit, total_assets, pct=True)
# 偿债能力
debt_to_assets = safe_divide(total_liab, total_assets, pct=True)
current_ratio = safe_divide(current_assets, current_liab)
quick_ratio = safe_divide(current_assets - inventory, current_liab)
输出字段(共22个)
end_date, eps, roe, roa, grossprofit_margin, netprofit_margin, op_margin,
debt_to_assets, current_ratio, quick_ratio, assets_turn,
operating_cashflow, investing_cashflow, financing_cashflow,
ocf_to_revenue, ocf_to_profit, revenue, net_profit,
total_assets, total_liab, total_equity, monetary_funds
输出示例
end_date 20250630 20250331
eps 5.153000e+01 2.176000e+01
roe 2.602360e+01 1.039290e+01
grossprofit_margin 9.129000e+01 8.976000e+01
netprofit_margin 5.208010e+01 5.222450e+01
debt_to_assets 1.280880e+01 1.212270e+01
current_ratio 6.619300e+00 7.060700e+00
日线数据获取
功能说明
通过 stock_zh_a_hist() 获取 A 股历史日线数据,支持前复权/后复权/不复权。
数据来源:东方财富(不稳定,可能遭遇反爬)
适用场景:技术分析、趋势策略、量化回测等。
核心代码
import akshare as ak
STOCK_CODE = '300750' # 纯数字代码
# 下载日线数据(前复权)
df = ak.stock_zh_a_hist(
symbol=STOCK_CODE,
period="daily", # 日线
start_date="20240101",
end_date="20251231",
adjust="qfq" # 前复权(qfq=前复权, hfq=后复权, ""=不复权)
)
接口参数
| 参数 | 说明 | 可选值 |
|---|---|---|
symbol | 股票代码 | 纯数字,如 '300750' |
period | K线周期 | "daily"、"weekly"、"monthly" |
start_date | 开始日期 | "YYYYMMDD" 格式 |
end_date | 结束日期 | "YYYYMMDD" 格式 |
adjust | 复权类型 | "qfq" 前复权、"hfq" 后复权、"" 不复权 |
返回字段
| 字段 | 说明 |
|---|---|
日期 | 交易日期 |
开盘 | 开盘价 |
收盘 | 收盘价 |
最高 | 最高价 |
最低 | 最低价 |
成交量 | 成交量(股) |
成交额 | 成交额(元) |
涨跌幅 | 涨跌百分比 |
换手率 | 换手率 |
输出示例
date open high low close volume
2024-01-02 1678.0 1698.0 1666.0 1685.0 32150800
2024-01-03 1686.0 1705.0 1681.0 1692.0 28765400
2024-01-04 1695.0 1718.0 1689.0 1712.0 35678900
批量重命名
原始返回中文列名,可统一转换为英文便于后续处理:
col_map = {
'日期': 'date',
'开盘': 'open',
'收盘': 'close',
'最高': 'high',
'最低': 'low',
'成交量': 'volume',
}
df = df.rename(columns=col_map)
df['date'] = pd.to_datetime(df['date'])
分钟数据获取
功能说明
通过 stock_zh_a_hist_min_em() 获取 A 股分钟级 K 线数据。
适用场景:盘口分析、短线择时、日内策略。
核心代码
import akshare as ak
STOCK_CODE = '300750'
# 下载1分钟数据
df = ak.stock_zh_a_hist_min_em(
symbol=STOCK_CODE,
start_date="2026-02-10 09:30:00",
end_date="2026-02-10 15:00:00",
period="1",
adjust=""
)
接口参数
| 参数 | 说明 | 可选值 |
|---|---|---|
symbol | 股票代码 | 纯数字,如 '300750' |
start_date | 开始时间 | "YYYY-MM-DD HH:MM:SS" 格式 |
end_date | 结束时间 | "YYYY-MM-DD HH:MM:SS" 格式 |
period | K线周期 | "1"、"5"、"15"、"30"、"60" |
adjust | 复权类型 | "qfq"、"hfq"、"" 不复权(分钟数据通常不复权) |
重要限制
注意:该接口只能获取最近5个交易日的数据,无法获取历史分钟数据。
返回字段
| 字段 | 说明 |
|---|---|
时间 | 交易时间(精确到分钟) |
开盘 | 开盘价 |
收盘 | 收盘价 |
最高 | 最高价 |
最低 | 最低价 |
成交量 | 成交量 |
成交额 | 成交额 |
输出示例
datetime open high low close volume amount
2026-02-10 09:30:00 1780.0 1785.0 1778.0 1782.0 125400 223158000
2026-02-10 09:31:00 1782.0 1788.0 1781.0 1785.0 98700 176295000
2026-02-10 09:32:00 1785.0 1790.0 1784.0 1788.0 112300 200694000
常见问题
Q: 如何获取其他股票的数据?
将代码中的股票代码替换即可:
- AkShare 格式:纯数字,如
'300750' - 新浪格式:
'sh300750'(财务数据接口使用)
Q: 复权是什么意思?
- 前复权(qfq):以当前价格为基准,向后调整历史价格。适合技术分析。
- 后复权(hfq):以历史价格为基准,向前调整价格。适合长期投资分析。
- 不复权:保持原始价格。适合计算真实波动。
Q: AkShare 稳定性如何?
AkShare 的数据源来自新浪、东方财富等平台,东方财富近期反爬机制越来越严格,日线和分钟数据接口可能出现获取失败的情况。财务数据使用新浪接口,相对稳定,但仍不保证 100% 可用。
建议:如需稳定的数据源,可考虑 Tushare Pro(需要 Token,但数据质量更高、更稳定)。
Q: 数据导出格式是什么?
默认保存为 CSV 文件(encoding='utf-8-sig'),可用 Excel 或 Pandas 直接读取。
完整运行示例
cd 002
python 财务数据-akshare.py
python 日线数据-akshare.py
python 分钟数据-akshare.py
数据文件保存在各脚本目录下的 data/ 文件夹中。
总结
| 数据类型 | 接口函数 | 数据范围 | 是否有时间限制 |
|---|---|---|---|
| 财务数据 | stock_financial_report_sina | 全历史报告期 | 无 |
| 日线数据 | stock_zh_a_hist | 自定义起止日期 | 无 |
| 分钟数据 | stock_zh_a_hist_min_em | 最近5个交易日 | 有(5天) |
AkShare 最大的优势是无需注册、即装即用,适合快速验证和数据原型开发。但数据源稳定性存在问题,建议生产环境使用 Tushare Pro。
代码地址,分钟数据最近可能不稳定,无法获取数据
写在最后
下一章节,我会介绍另一种更加稳定的获取数据的方式TuShare,但是它是付费的。如果觉得这篇文章对你们有帮助,请记得点赞和评论和分享。你们的支持是我写作的动力。