搞了一个半小时,终于可以自由获取Excel版财务报表啦~

2024-03-28 06:50

本文主要是介绍搞了一个半小时,终于可以自由获取Excel版财务报表啦~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近来看了一些讲财务报表分析的书,自己也想趁热打铁练习练习,毕竟光说不练假把式嘛。于是首要任务便是下载上市公司的财报数据,自己以前也下载过,估计不会有什么麻烦,没想到做起来却犯了难。

首先,财报下载主要有2个途径:

1、专业数据库下载。比如国泰安、Wind数据库、Choice数据库等。

优点:数据完整,准确度较高。

缺点:收费。

2、财经网站下载(可能需要爬虫)。比如新浪财经、东方财富网。(网易财经以前可以,现在已经停止相关服务)

优点:免费。

缺点:需要手动搜集整理数据,甚至需要用网络爬虫,对技术有一定要求。

可见,两种途径优劣互补。但作为动手能力强的白嫖党,肯定毫不犹豫地选择第2种啦。(好吧我承认还是因为穷……)

一、分析思路

打开新浪财经网页,随便输入一支股票(这里以汤臣倍健为例),然后进入它的财务报表页面,发现它已经详细展示了历年资产负债表、利润表和现金流量表数据,摆出了一副渴望被爬取的架势。

网址:汤臣倍健(300146)财务摘要_新浪财经_新浪网 (sina.com.cn)

页面上,我们可以在不同报表间切换,也可以点击切换“年报”“中报”其他类型。切换后地址栏URL没有变化,显然是使用了动态网页技术,我们需要通过浏览器的“检查”→“网络”来捕获实际访问的地址。

稍加尝试,我们便捕捉到了动态页面加载时实际访问的URL:

经过测试,我们发现网址中的callback参数可以去除,不影响返回的数据结果,于是我们得到了所真正需要的URL:

资产负债表:https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022?paperCode=sz300146&source=fzb&type=4&page=1&num=10

利润表:https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022?paperCode=sz300146&source=lrb&type=4&page=1&num=10

现金流量表:https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022?paperCode=sz300146&source=llb&type=4&page=1&num=10

在浏览器中打开上面三个链接,发现返回的都是json数据:

我们要的年度财务报表数据就嵌套在json数据的一个又一个字典中,并且里面的汉字使用了Unicode编码,好在我们可以使用强大的Python和它的json库,能够轻松地把我们要的数据提取出来。

二、代码实现

分析完思路,明确了我们要访问的URL和要解析的数据,接下来就可以尝试着用Python代码实现啦,毕竟人生苦短,请用Python~~代码整体的结构就是:

1、访问URL获取数据

2、用json库解析数据

3、保存数据并输出为Excel文件

话不多说,为老铁们送上热乎的代码:

import requests
import time
import json
import pandas as pdstart_year = '2022'
market = 'sz' # sz代表深交所,sh代表上交所
code = '300146'
sheets = ['fzb','lrb','llb']
tp = '4' # 0:全部,1:一季报,2:半年报,3:三季报,4:年报
page = '1'
num = '10'hds = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
}for sheet in sheets:com_url = 'https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport' + start_year + '?paperCode=' + market + code + '&source=' + sheet + '&type=' + tp + '&page=' + page + '&num=' + numr = requests.get(com_url, headers = hds)rtext = r.textjson_data = json.loads(rtext)projects = []; i = 0; result_dict = dict()for year in range(int(start_year), int(start_year) - int(num), -1):year_data = json_data['result']['data']['report_list'][str(year) + '1231']['data']i = i + 1; year_result = []if i == 1:for dct in year_data:projects.append(dct['item_title'])result_dict['报表项目'] = projectsfor dct in year_data:if str(dct['item_value']) == 'None':year_result.append(0)elif dct['item_value'] == '':year_result.append('')else:year_result.append(float(dct['item_value']))result_dict[str(year) + '年'] = year_resulttime.sleep(1)sheet_data = pd.DataFrame(data = result_dict)sheet_data.to_excel(code + ' ' + sheet + '.xlsx',index = False)print(code + ' ' + sheet + ' 数据已保存')

上述代码要求安装了requests和pandas库,小伙伴们可以自己复制粘贴代码运行一下,有什么问题可以评论区留言。

运行完毕后,就会生成三个Excel文件,即我们心心念念的资产负债表、利润表、现金流量表。

三、结果展示

大家看看结果吧,是不是自己想要的那样呢。

资产负债表:

利润表:

现金流量表:

以上搞完大概花了一个半小时,虽然有点小累,但成就感满满。作为财务人士,以后可以自由下载想要的财报啦。

老铁们懂Python的,可以自己改改代码,批量爬取数据。当然控制好节奏哈,新浪的反爬虫还是挺猛的。

小伙伴们还有什么问题,欢迎评论区留言哦。

这篇关于搞了一个半小时,终于可以自由获取Excel版财务报表啦~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854797

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx