目录

上市公司历年财务报表数据获取

财务报表数据虽然 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个文件夹,保存每个股票报表的历史数据:

大概长这样:

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