AI股票小助手02-Akshare数据采集

by 雪隐 from juejin.cn/user/143341...

文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权

AkShare 金融数据获取教程

本文介绍如何使用 AkShare 获取三类常用金融数据:财务数据、日线数据、分钟数据。以宁德时代(300750)为例,演示完整的数据获取流程。


目录


环境准备

由于这个专栏不是python教学。麻烦大家自己去了解python相关,如果什么都要从初级开始写,可能篇幅会很大。并且,现在有了AI,所有的代码理解起来并不是那么困难,大家可以通过各种web端的AI,来辅助大家。

这里我推荐大家在自己的机器上安装miniconda, 请参照安装指南,因为如果东西多了以后,可能会发生依赖不兼容的情况。

安装完成以后,请执行下面的命令,我一般习惯用python=3.10或者3.11,这2个版本对大模型的兼容性较好。

bash 复制代码
conda create -n stock_assistant python=3.10 -y
conda activate stock_assistant
pip install akshare pandas

财务数据获取

功能说明

通过 stock_financial_report_sina() 获取三大财务报表(利润表、资产负债表、现金流量表),再自行计算常用财务指标。

适用场景:需要从原始报表提取特定指标,或做自定义财务分析。

核心代码

python 复制代码
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 返回的是原始报表,字段名存在中英文混用、版本差异等问题,需要做字段映射:

python 复制代码
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

财务指标计算示例

python 复制代码
# 盈利能力
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个)

matlab 复制代码
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

输出示例

matlab 复制代码
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 股历史日线数据,支持前复权/后复权/不复权。

数据来源:东方财富(不稳定,可能遭遇反爬)

适用场景:技术分析、趋势策略、量化回测等。

核心代码

python 复制代码
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" 后复权、"" 不复权

返回字段

字段 说明
日期 交易日期
开盘 开盘价
收盘 收盘价
最高 最高价
最低 最低价
成交量 成交量(股)
成交额 成交额(元)
涨跌幅 涨跌百分比
换手率 换手率

输出示例

yaml 复制代码
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

批量重命名

原始返回中文列名,可统一转换为英文便于后续处理:

python 复制代码
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 线数据。

适用场景:盘口分析、短线择时、日内策略。

核心代码

python 复制代码
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个交易日的数据,无法获取历史分钟数据。

返回字段

字段 说明
时间 交易时间(精确到分钟)
开盘 开盘价
收盘 收盘价
最高 最高价
最低 最低价
成交量 成交量
成交额 成交额

输出示例

yaml 复制代码
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 直接读取。

完整运行示例

bash 复制代码
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,但是它是付费的。如果觉得这篇文章对你们有帮助,请记得点赞和评论和分享。你们的支持是我写作的动力。

相关推荐
Bacon1 小时前
手摸手带你搞清楚 AI Agent 的六大核心概念
前端·人工智能
aneasystone本尊1 小时前
给小龙虾配个浏览器:学习 browser 工具
人工智能
阿里云大数据AI技术1 小时前
阿里云 ES Agent Builder 使用指引
人工智能·搜索引擎
YueJoy.AI1 小时前
创业公司如何实现持续增长
人工智能·ai·语言模型
zxsz_com_cn1 小时前
工厂中需要预测性维护的关键设备
人工智能·数据挖掘
AI科技星1 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
__log1 小时前
如何优雅地“借鉴”任何网站的设计系统
人工智能·架构·知识图谱
醒醒该学习了!2 小时前
AI生成音频
人工智能
清溪5492 小时前
pgAdmin4 <= 9.1_RCE(CVE-2025-2945)复现
数据库·后端