爬虫实战

您所在的位置:网站首页 巨潮资询官方网 爬虫实战

爬虫实战

2023-11-16 17:24| 来源: 网络整理| 查看: 265

目标

爬取2001-2019年A股全部上市公司的年度财务报告

前言

目前网络平台上已经有大量介绍如何用Python爬取公司年报的文章,例如:

《实战演练-爬取深交所年报》

《【爬虫】用Python爬取公司年报》

《Python爬取上交所年报并下载》

但是,我们知道A股上市公司的年度财务报告分别披露在 上海证券交易所深圳证券交易所、以及巨潮资讯网。上述三篇文章分别介绍了如何从上交所、深交所和巨潮资讯网爬取公司年报并下载,基本思路是:解析网站结构,获取网站内所有上市公司年报PDF的url地址,并通过访问url地址进行年报下载。具体操作步骤可参考上述文章。每个网站的结构不同,爬虫获取的年报pdf下载链接的程序也不尽相同,因此,想要爬取完整的A股公司年报费时费力。

上海证券交易所深圳证券交易所巨潮资讯网

如果有公开数据提供A股公司年报PDF下载链接,则不必重复“造轮子”,费心解析网站结构获取年报PDF访问地址了。最近,笔者了解到在文构财经文本数据平台的论文数据公开的数据中综合整理了上交所、深交所和巨潮资讯网数据,包含2001-2019年A股上市公司年报的下载链接,数据如图。在此数据基础上,则可直接利用Python循环访问PDF_link下载并保存公司年报。

数据结构基本思路

1.读取所有上市公司年报的下载链接rep_link

2.访问下载链接rep_link下载公司年报并保存

实现过程

导入Python第三方库:

import pandas as pd import requests import random import time import os

读取文构财经平台数据平台公开数据:

rawdata=pd.read_excel('公司竞争战略指标_2001_2019.xlsx', sheet_name = 0) def get_data(iloc): rawdata['year'] = rawdata['rep_period'].dt.year firm = rawdata.at[iloc,'security_name'].replace("*","") # 去掉*ST的*号,文件命名不含特殊符 code = rawdata.at[iloc,'security_code'] year = rawdata.at[iloc,'year'] pdf_url = rawdata.at[iloc,'rep_link'] return firm,code,year,pdf_url

定义文件保存名称和路径:

def get_filepath(firm,year): file_path = 'F:\\年度财务报告\\' file_name = "{}-{}-{}年年度报告.pdf".format(code,firm,year) file_full_name = os.path.join(file_path,file_name) return file_full_name

下载公司年报:

def download_pdf(url,file_full_name): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60'} res = requests.get(url,headers=headers) with open(file_full_name,"wb") as fp: for chunk in res.iter_content(chunk_size=1024): if chunk: fp.write(chunk) 代码实现

三十行代码轻松实现爬取2001-2019年A股全部上市公司的年度财务报告

import pandas as pd import requests import random import time import os rawdata=pd.read_excel('公司竞争战略指标_2001_2019.xlsx', sheet_name = 0) def get_data(iloc): rawdata['year'] = rawdata['rep_period'].dt.year firm = rawdata.at[iloc,'security_name'].replace("*","") # 去掉*ST的*号,文件命名不含特殊符号 code = rawdata.at[iloc,'security_code'] year = rawdata.at[iloc,'year'] pdf_url = rawdata.at[iloc,'rep_link'] return firm,code,year,pdf_url def get_filepath(firm,year): file_path = 'F:\\财务报告\\' file_name = "{}-{}-{}年年度报告.pdf".format(code,firm,year) file_full_name = os.path.join(file_path,file_name) return file_full_name def download_pdf(url,file_full_name): headers = {'User-Agent':''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60''} res = requests.get(url,headers=headers) with open(file_full_name,"wb") as fp: for chunk in res.iter_content(chunk_size=1024): if chunk: fp.write(chunk) for iloc in range(rawdata.shape[0]): firm, code, year, pdf_url = get_data(iloc) print("开始下载{},股票代码{}的{}年报".format(firm,code,year)) file_full_name = get_filepath(firm,year) download_pdf(pdf_url,file_full_name) time.sleep(random.uniform(3,4)) print("===========下载完成==========")

运行结果:

运行过程文件保存经管文本分析专栏

爬虫 | 30行代码轻松爬取全部A股公司年报

经管文本分析 | 年报PDF转换TXT统计关键词词频

阅读笔记 | 金融学文本大数据挖掘方法与研究进展

经管文本分析 | 管理层讨论与分析披露的信息含量

参考资料

[1]http://www.wingodata.com/#/dash/public-paper

[2]https://mp.weixin.qq.com/s/u7sWCejoK_zZWsSmGwxJ-Q

[3]https://blog.csdn.net/qq_36780279/article/details/103946869

[4]https://blog.csdn.net/weixin_43636302/article/details/93202006



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3