利用Python实现批量下载上市公司财务报表

利用Python实现批量下载上市公司财务报表

简介

本文将介绍如何利用Python和第三方库实现批量下载上市公司财务报表。我们将以下载深交所上市公司2019年半年度报告为例。

步骤

步骤一:确定下载链接

首先我们需要确定要下载哪些报表,以及它们的下载链接。深交所上市公司2019年半年度报告的下载链接为:

http://www.szse.cn/disclosure/listed/bulletinDetail/index.html?bulletinId=59459993167&companyCode=000895

其中,bulletinId表示报表的ID,companyCode表示公司的代码。我们需要将这两个参数提取出来,并将它们放进模板链接中,以便后续循环下载所有报表。

步骤二:解析公司列表

我们需要先获取所有上市公司的代码和名称。深交所提供了一个接口可以获取这些信息,请求链接为:

"http://www.szse.cn/api/report/ShowReport/data"

该接口返回的是一个json格式的数据,其中data字段是一个包含所有公司信息的列表。

步骤三:下载报表

有了步骤一和步骤二,我们就可以开始下载报表了。我们可以使用requests库向服务器发送请求,并将响应内容保存为pdf文件。

示例代码如下:

import requests

for company in companies:
    company_code = company['code']
    report_id = "59459993167" # 以2019年半年度报告为例
    url = f"http://www.szse.cn/disclosure/listed/bulletinDetail/index.html?bulletinId={report_id}&companyCode={company_code}"
    response = requests.get(url)
    filename = f"{company['name']}-2019半年度报告.pdf"
    with open(filename, 'wb') as f:
        f.write(response.content)

其中,companies是一个包含所有上市公司信息的列表,company['code']表示每个公司的代码,company['name']表示每个公司的名称。requests.get(url)向服务器发送请求并获取响应内容。我们将响应内容保存到以公司名称和报表类型为文件名的pdf文件中。

步骤四:处理异常

在下载过程中可能会出现网络异常等错误,我们需要对这些异常进行处理,否则程序会崩溃。我们可以使用try...except语句捕获异常并记录错误日志,以便后续处理。

示例代码如下:

import requests
import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.ERROR)

for company in companies:
    try:
        company_code = company['code']
        report_id = "59459993167" # 以2019年半年度报告为例
        url = f"http://www.szse.cn/disclosure/listed/bulletinDetail/index.html?bulletinId={report_id}&companyCode={company_code}"
        response = requests.get(url)
        filename = f"{company['name']}-2019半年度报告.pdf"
        with open(filename, 'wb') as f:
            f.write(response.content)
    except Exception as e:
        logger.error(f"Failed to download {company['name']} report due to {e}")

其中,logging.getLogger(__name__)创建一个名为__name__的Logger实例,logging.basicConfig(level=logging.ERROR)设置记录日志的级别为ERROR。我们在try...except语句中捕获全部异常,并使用Logger记录错误日志。

示例

以下是几个示例:

示例1:获取所有公司信息

import requests

url = "http://www.szse.cn/api/report/ShowReport/data"
response = requests.get(url)
data = response.json()['data']

for company in data:
    print(company['code'], company['name'])

示例2:下载2019年半年度报告

import requests

companies = [{'code': '000001', 'name': '平安银行'}, {'code': '000002', 'name': '万科A'}, {'code': '000004', 'name': '国农科技'}, {'code': '000005', 'name': '世纪星源'}, {'code': '000006', 'name': '深振业A'}, {'code': '000007', 'name': '零七股份'}, {'...
report_id = "59459993167"

for company in companies:
    company_code = company['code']
    url = f"http://www.szse.cn/disclosure/listed/bulletinDetail/index.html?bulletinId={report_id}&companyCode={company_code}"
    response = requests.get(url)
    filename = f"{company['name']}-2019半年度报告.pdf"
    with open(filename, 'wb') as f:
        f.write(response.content)

以上示例仅供参考。实际使用时,需要根据实际情况进行修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python实现批量下载上市公司财务报表 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 浅谈Python接口对json串的处理方法

    Python是一种流行的编程语言,可以方便地处理JSON数据。在接口开发中,我们经常需要处理JSON数据。本文将详细讲解Python接口对JSON串的处理方法,包括JSON串的解析、生成和格式化,以及使用requests库发送HTTP请求和处理HTTP响应的示例代码。 JSON串的解析 在Python中,我们可以使用json模块解析JSON串。以下是一个示例…

    python 2023年5月15日
    00
  • Python运行提示缺少模块问题解决方案

    针对Python运行提示缺少模块问题,一般可以使用以下几种方法进行解决: 方法一:使用pip安装相应模块 打开终端或者命令行界面 输入pip install 模块名(注:模块名需要根据具体情况进行替换) 等待安装完成,再运行程序即可 示例说明 例如在代码中使用了pandas模块,但是运行时出现了提示缺少这个模块,那么可以使用以下命令安装该模块: pip in…

    python 2023年6月2日
    00
  • Python+Pyqt实现简单GUI电子时钟

    下面是实现“Python+Pyqt实现简单GUI电子时钟”的完整攻略。 1. 准备工作 在开始之前,我们需要先安装好Python和Pyqt。 安装Python:在Python官网上下载对应版本的Python安装包,安装完成后配置好环境变量即可。 安装Pyqt:打开命令行工具,执行以下命令即可安装Pyqt: pip install pyqt5 2. 创建GUI…

    python 2023年6月2日
    00
  • python读取excel数据并且画图的实现示例

    下面我将详细讲解如何使用Python读取Excel数据并画图的实现示例。我会按照以下步骤进行介绍: 安装所需库 读取Excel文件 数据处理 绘制图表 本篇教程以实例为主,所使用的库为:pandas、matplotlib、xlrd,请确保你已经完成它们的安装。 1. 安装所需库 !pip install pandas matplotlib xlrd -i h…

    python 2023年5月13日
    00
  • Python argv用法详解

    Python argv用法详解 在Python中,可以使用sys.argv模块接受命令行传递的参数。这个模块在一个Python程序中非常有用,因为可以轻松地将参数传递给脚本,并在脚本中使用这些参数。 简介 sys.argv是一个包含命令行参数的列表。命令行参数包括传递给程序的参数以及程序本身的名称。注意,这个列表的第一个元素是脚本的名称。 用法 下面是一个简…

    python 2023年6月3日
    00
  • Python创建xml的方法

    标题:Python创建XML的方法 在Python中,有多种方式可以创建XML文档: 1. 使用xml.etree.ElementTree模块 xml.etree.ElementTree模块提供了创建、解析和操作XML文档的常用工具。具体步骤如下: 创建根节点对象并设定根节点名称和属性; 创建子节点并设定节点属性; 将子节点添加到根节点下; 将结果写入文件。…

    python 2023年6月3日
    00
  • 14面向对象

    面向对象 面向对象编程介绍 面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。 面向过程与面向对象区别 面向过程:根据业务逻辑从上到下写代码  面向对象:将数据与…

    python 2023年4月17日
    00
  • Python 中list ,set,dict的大规模查找效率对比详解

    以下是“Python中list、set、dict的大规模查找效率对比详解”的完整攻略。 1. list、set、dict的概述 在Python中,list、set、dict是常用的数据类型。它们别用于存储有序的素、无序的元素和键值对。在进行大规模查找时,它们的效率是不的。 list:list是一种有序的数据类型,可以存储任何类型的数据。在进行查找时,需要遍历…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部