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

yizhihongxing

利用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标准库time使用方式详解

    Python标准库time使用方式详解 1. time库概述 time是Python标准库中与时间相关操作最为常用的模块之一,它提供了各种处理时间和日期的函数。 2. time库基础知识 2.1 time模块中的常用函数 以下是time模块中常用的函数: 函数 描述 time() 返回当前时间的时间戳 clock() 返回处理器时间 sleep() 推迟调用…

    python 2023年5月14日
    00
  • 使用Python中的线程进行网络编程的入门教程

    使用Python中的线程进行网络编程是一种广泛使用的技术,可以有效地提高程序的运行速度和并发性。以下是一个完整的攻略,介绍如何使用Python中的线程进行网络编程。 1. 理解网络编程和线程 首先,我们需要了解网络编程和线程的概念。网络编程是指使用计算机网络进行通信和数据交换的技术,而线程是操作系统中用于实现并发性的基本单位,它负责运行程序的不同部分,从而实…

    python 2023年6月6日
    00
  • Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法

    当Python中的Matplotlib模块用于绘制图形时,往往需要对图形进行标注,比如绘图的横坐标或纵坐标需要加上中文标题或特殊符号。但是,Matplotlib默认情况下并不支持这些特殊字符的显示,需要进行一些设置和转换才能实现。下面是使用Python中的Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法的完整攻略。 配置字体 Matplotli…

    python 2023年5月18日
    00
  • python3正则提取字符串里的中文实例

    以下是“Python3正则提取字符串里的中文实例”的完整攻略: 一、问题描述 在Python3中,我们可以使用正则表达式来提取字符串中的中文字符。本文将详细讲解如何使用正则表达式来提取字符串中的中文字符,并提供两个示例说明。 二、解决方案 2.1 正则表达式 在Python3中,我们可以使用正则表达式来匹配中文字符。以下是一个示例,演示了如何使用正则表达式来…

    python 2023年5月14日
    00
  • python爬虫爬取bilibili网页基本内容

    下面是关于“Python爬虫爬取B站网页基本内容”的攻略: 1. 确定爬虫目标 为了爬取Bilibili的网页数据,我们需要确定需要爬取的内容。在这个过程中,可以参考B站网页的HTML结构,以及Web开发中HTML标签和CSS样式的概念,找到我们需要的信息。 2. 确定爬取工具 爬取Bilibili网页数据可以使用Python中的requests和Beaut…

    python 2023年5月14日
    00
  • Python标准库os.path包、glob包使用实例

    下面是Python标准库os.path包、glob包使用实例的攻略。 什么是os.path包和glob包 os.path包 os.path模块是Python的标准库之一,提供了处理文件和目录路径的函数与变量。在不同的操作系统中,文件和目录的路径分隔符可能是不同的,os.path模块可以自动适配操作系统的路径分隔符。 glob包 glob模块是Python的标…

    python 2023年6月2日
    00
  • Python中if语句的基本格式实例代码

    以下是Python中if语句的基本格式实例代码的详细攻略: 基础知识 在Python中,条件判断语句if用于根据条件判断是否执行特定的代码块。当if语句的判断条件为真时,执行if语句后面的代码块;当判断条件为假时,则跳过代码块。if语句的基本格式如下: if 条件: 条件为真时才执行的代码块 条件是一个表达式,用来判断是否为真。如果为真,则执行后面的代码块。…

    python 2023年5月31日
    00
  • Python入门教程(二十)Python的Lambda表达式

    下面是详细的Python入门教程(二十)Python的Lambda表达式完整攻略。 什么是Lambda表达式 Lambda表达式,也称为匿名函数,是一种简洁、快速、内联定义函数的方法。Lambda表达式可以代替一些不必要的函数定义,使代码更加简洁易读。 Lambda表达式的语法结构如下: lambda argument_list: expression 其中…

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