重要信息看下面!!!!!!

备注(2025-1-19更新的):

这篇文章的附件里面的程序的api_key过期不能用了,所以我这次抽出时间升级了我的这个产品,界面更简洁,更好用,直接买这个 : 批量获取上市公司财务数据(利润表、现金表、资产负债表) 就可以了。这个文章下面就不用看了。

不要购买本产品,直接买最新的就行!!!!!

重要信息看上面!!!!!!

使用教程:

首先把自己要获取的公司名称写入txt文件,

注意英文逗号隔开就行,每一行结尾也要英文逗号。

然后和程序放在一个文件夹下

(程序双击就能运行,自己改一下要获取的上市公司的名称就行,里面的源码嵌入的账号是我自己的,因此有权限获取财务数据)

运行完就能得到数据。

(ps:可以反复运行,但是不要在这个文件夹里面生成了excel文件后再运行,不然之前得到的excel表会被覆盖。运行过后就把获得到的excel挪到别的文件夹再来运行程序获得新的财务数据表)
 

import pandas as pd
import requests
from bs4 import BeautifulSoup
import os

def read_company_names(txt_file):
    """从txt文件读取公司名称,假设每行一个公司名,忽略逗号"""
    if not os.path.exists(txt_file):
        print(f"文件 {txt_file} 不存在")
        return []
    with open(txt_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    # 处理每行,去除逗号和空白字符
    companies = [line.strip().rstrip(',') for line in lines if line.strip()]
    return companies

def get_financial_data(company_name):
    """获取公司财务数据的示例函数,需替换为合法数据源的逻辑"""
    # 这里仅为示例框架,实际需对接合法的财务数据API或爬取公开公告
    print(f"正在获取 {company_name} 的财务数据...")
    
    # 模拟数据,实际应从合法渠道获取
    balance_sheet = pd.DataFrame({
        '项目': ['资产总计', '负债总计', '所有者权益'],
        '2023年': [100000, 50000, 50000],
        '2022年': [90000, 45000, 45000]
    })
    
    income_stmt = pd.DataFrame({
        '项目': ['营业收入', '净利润', '毛利率'],
        '2023年': [60000, 10000, 30.5],
        '2022年': [50000, 8000, 28.3]
    })
    
    cash_flow = pd.DataFrame({
        '项目': ['经营活动现金流', '投资活动现金流', '筹资活动现金流'],
        '2023年': [15000, -8000, 3000],
        '2022年': [12000, -6000, 2000]
    })
    
    return {
        '资产负债表': balance_sheet,
        '利润表': income_stmt,
        '现金流量表': cash_flow
    }

def save_to_excel(data, company_name):
    """将财务数据保存到Excel"""
    filename = f"{company_name}_财务数据.xlsx"
    with pd.ExcelWriter(filename, engine='openpyxl') as writer:
        for sheet_name, df in data.items():
            df.to_excel(writer, sheet_name=sheet_name, index=False)
    print(f"{company_name} 的财务数据已保存至 {filename}")

def main():
    # 读取公司名称,默认从 companies.txt 读取
    company_names = read_company_names('companies.txt')
    if not company_names:
        return
    
    for company in company_names:
        financial_data = get_financial_data(company)
        save_to_excel(financial_data, company)
    
    print("所有公司财务数据获取完成")

if __name__ == "__main__":
    main()

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐