上市公司历年财务报表数据获取
目录
财务报表数据虽然 tushare ,同花顺,万德等都有,
但是我没有付费账号。
前两天我问茶瓜子,有没有现成的数据,
他说他也就是插件里写的代码获取新浪财经的。
我是想全量获取,导到数据库里。
写了半天代码,结果最后看到 python 的 akshare 库直接全写好的,
免费可以获取。

我前天获取完了,放在【审计军火库】网盘中了。
有需要的可以直接下载。
百度网盘:https://pan.baidu.com/s/1HuDsgS4MnXb2PlYWwoMVOA?pwd=nigo
夸克网盘:https://pan.quark.cn/s/48060fbe03ff
阿里网盘:https://www.alipan.com/s/5hZXhQjytpD
数据获取代码:
先 python 安装下 akshare 库:
pip install akshare
获取股票代码
直接调用一个函数 stock_info_a_code_name
就行:
import akshare as ak
df = ak.stock_info_a_code_name()
df.to_excel('股票代码.xlsx',index=False)
print('over')
直接从上交所、深交所、北交所获取当前所有股票代码:

获取生成财务报表
包含了:资产负债表、利润表、现金流量表以及指标表。
下面代码,我也是调用 akshare 的函数进行批量获取,
稍微控制了下获取速度,否则频率过高会获取不了。
import akshare as ak
import pandas as pd
from tqdm import tqdm
import time
import os
import warnings
warnings.filterwarnings("ignore", category=pd.errors.PerformanceWarning)
# 读取股票代码列表 注:这里修改下你自己的文件路径和股票代码字段的字段名
df = pd.read_excel('股票代码.xlsx', converters={"code": str})
codes = df['code'].to_list()
# 报表类型列表
report_types = {
"资产负债表": "资产负债表",
"利润表": "利润表",
"现金流量表": "现金流量表",
"关键指标表": "关键指标表"
}
# 创建4个报表对应的文件夹
for folder in report_types.values():
os.makedirs(folder, exist_ok=True)
fail_count = 0 # 连续失败次数
# 遍历股票代码
with tqdm(total=len(codes), desc="开始下载") as pbar:
for code in codes:
for report_name, folder in report_types.items():
file_path = f"{folder}/{code}.csv"
# 如果文件已存在,跳过
if os.path.exists(file_path):
pbar.set_description(f"✅ 已存在 {code}-{report_name}")
continue
try:
# 关键指标表用不同函数
if report_name == "关键指标表":
df_report = ak.stock_financial_abstract(symbol=code)
else:
df_report = ak.stock_financial_report_sina(stock=code, symbol=report_name)
df_report.insert(0, "股票代码", code)
df_report.to_csv(file_path, index=False)
pbar.set_description(f"✅ 成功 {code}-{report_name}")
time.sleep(3)
fail_count = 0 # 成功后重置失败次数
except Exception as e:
pbar.set_description(f"❌ 失败 {code}-{report_name}")
# 写入错误日志
pd.DataFrame([[code, report_name, str(e)]], columns=["股票代码", "报表类型", "错误信息"])\
.to_csv("error.csv", mode='a', header=not os.path.exists("error.csv"), index=False)
fail_count += 1
if fail_count >= 5:
pbar.set_description("🚨 连续失败 5 次,暂停10分钟")
time.sleep(600)
else:
time.sleep(10)
pbar.update(1) # 处理完一个股票代码,更新进度条
完整后,会在 python 文件目录下创建4个文件夹,保存每个股票报表的历史数据:

大概长这样:

网盘里有我合并成一个文件的。