利用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技术站