☰
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #10】财务报表三表去哪下?8个接口,资产负债表·利润表·现金流一次取
2026/10/3 6:15:31 网站建设 项目流程

【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #10】财务报表三表去哪下?8个接口,资产负债表·利润表·现金流一次取

系列:别再到处找免费股票数据API了:官方204个接口,32篇一次讲透|连载项目 · 纯 GET 取数 · 仅依赖 requests
适用:做量化 / 选股 / 复盘,但还在手动导 CSV、网页复制、自写爬虫的读者。本篇给沪深A股财务报表的 8 个端点的分组地图、一键拉全三表与股东数据的代码,全部只依赖 requests,所有示例均为演示数据,不构成投资建议。

1. 你将得到什么

读完这一篇,你能拿走四样东西:

  1. 一张分组地图:8 个端点按用途分组,知道什么数据该敲哪个门;
  2. 一行取数的代码:主要端点一次返回,不用循环拼装;
  3. 资产负债表/利润表/现金流量表与十大股东的字段解析坑;
  4. 三个真实踩坑点,都是第一次用几乎一定会踩的。

代码全部自包含,复制进.py直接能跑,不依赖 numpy / pandas。

2. 本篇取数约定

  • 全部接口都是GET + query 参数,token 放在查询串里(?token=xxx);
  • 统一基址https://api.zhituapi.com;
  • 代码块里的你的token是占位符,换成你的 token 即可;
  • 所有接口路径均取自官方已验证文档,跨篇零重复。

3. 8 个端点分 4 组

先建立地图。沪深A股财务报表一共 8 个端点,按用途分:

组端点用途更新频率
三表/hs/fin/balance资产负债表每日盘后
三表/hs/fin/income利润表每日盘后
三表/hs/fin/cashflow现金流量表每日盘后
财务指标/hs/fin/ratios财务指标每日盘后
股本/hs/fin/capital股本结构每日盘后
股东/hs/fin/topholder十大股东季度
股东/hs/fin/flowholder流通股东季度
股东/hs/fin/hm股东户数季度

4. 核心模板函数

importrequests,timefromurllib.parseimportquote BASE="https://api.zhituapi.com"TOKEN="你的token"# ---------- 1. 字段容错与类型归一 ----------def_hit_key(d,*cands,default=None):"""字段容错:接口偶发大小写/中英文混用时,按顺序取第一个非空值"""ifnotisinstance(d,dict):returndefaultforcincands:ifcindandd[c]notin(None,"","-","null"):returnd[c]low={str(k).lower():vfork,vind.items()}forcincands:v=low.get(str(c).lower())ifvnotin(None,"","-","null"):returnvreturndefaultdef_to_float(v,default=None):try:ifvin(None,"","-","null","None"):returndefaultreturnfloat(v)except(TypeError,ValueError):returndefault# ---------- 2. 统一请求:重试 + 退避 ----------def_get(path,params=None,timeout=10,retries=2,backoff=0.6,default=None):"""返回 JSON;失败重试 retries 次仍失败则返回 {'_error': 原因}"""q={"token":TOKEN}ifparams:q.update(params)last=""foriinrange(retries+1):try:r=requests.get(BASE+path,params=q,timeout=timeout)ifr.status_code==200:try:returnr.json()exceptValueError:returndefault last="HTTP %s %s"%(r.status_code,(r.textor"").strip()[:80])exceptExceptionase:last="%s: %s"%(type(e).__name__,e)ifi<retries:time.sleep(backoff*(i+1))return{"_error":last}deffetch_hs_fin_balance():return_get("/hs/fin/balance",default=[])deffetch_hs_fin_income():return_get("/hs/fin/income",default=[])deffetch_hs_fin_cashflow():return_get("/hs/fin/cashflow",default=[])deffetch_hs_fin_ratios():return_get("/hs/fin/ratios",default=[])deffetch_hs_fin_capital():return_get("/hs/fin/capital",default=[])deffetch_hs_fin_topholder():return_get("/hs/fin/topholder",default=[])deffetch_hs_fin_flowholder():return_get("/hs/fin/flowholder",default=[])deffetch_hs_fin_hm():return_get("/hs/fin/hm",default=[])# ---------- 3. 校验 ----------defrun_check():assert_hit_key({"Code":"000001","Name":"平安银行"},"code","dm")=="000001"assert_to_float("-")isNoneand_to_float("12.5")==12.5enc="/x/%s"%quote("示例")assert"示例"notinencand"%"inencprint("校验通过")if__name__=="__main__":run_check()print("-"*62)forname,pathin[("资产负债表","/hs/fin/balance"),("利润表","/hs/fin/income"),("现金流量表","/hs/fin/cashflow"),("财务指标","/hs/fin/ratios"),("股本结构","/hs/fin/capital"),("十大股东","/hs/fin/topholder"),("流通股东","/hs/fin/flowholder"),("股东户数","/hs/fin/hm")]:data=_get(path,default=[])ifisinstance(data,dict)and"_error"indata:print("%-12s %-40s -> %s"%(name,path,data["_error"][:60]))else:print("%-12s %-40s -> %d 条"%(name,path,len(data)))

5. 跑通示例

把上面的代码复制到本地,填入你的 token 即可直接运行:它会请求对应接口、拉取真实数据,并输出各端点的条数(各字段含义见前文各小节)。

6. 坑与注意事项

坑 1:三表字段名不统一。
资产负债表用「资产合计」、利润表用「营业收入」,别用同一套 key 解析,用 _hit_key 容错大小写/中英文。

坑 2:现金流量表分三段。
经营/投资/筹资三段要确认取哪段,否则会漏;带报告期参数,不传默认最新季度。

坑 3:股东是季度快照。
十大股东/流通股东带报告期,不用最新报告期会取到旧季度;做排行前先确认报告期。

7. 小结与下篇预告

本篇把沪深A股财务报表类 8 个端点分成 4 组,给出一行拉全三表与股东数据的代码,并用 run_check 验证字段容错。

下一篇:《【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #11】指数行情去哪查?2个接口,主要指数实时列表一次拉》:用本篇同组接口,把下一类数据一次取全。

8. 免责声明

本文仅演示沪深A股财务报表数据的取数方法,所有代码示例均为演示数据,未含任何真实行情数值,不构成投资建议,亦不承诺收益。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询