python批量下载上交所上市公司报告
上交所的上市公司报告搜索页面http://www.sse.com.cn/disclosure/listedinfo/announcement/
通过查看页面调用的接口可以发现:
- 获取上交所全部股票代码http://www.sse.com.cn/js/common/ssesuggestdata.js
- 获取上交所全部基金代码http://www.sse.com.cn/js/common/ssesuggestfunddata.js
- 获取上交所全部E债券代码http://www.sse.com.cn/js/common/ssesuggestEbonddata.js
- 获取上交所全部T债券代码http://www.sse.com.cn/js/common/ssesuggestTbonddata.js
随便在页面上查询一个股票的年报,调用的接口如下http://query.sse.com.cn/security/stock/queryCompanyBulletin.do?jsonCallBack=jsonpCallback47120&isPagination=true&productId=600000&keyWord=&securityType=0101%2C120100%2C020100%2C020200%2C120200&reportType2=DQBG&reportType=YEARLY&beginDate=2016-07-20&endDate=2019-07-20&pageHelp.pageSize=25&pageHelp.pageCount=50&pageHelp.pageNo=1&pageHelp.beginPage=1&pageHelp.cacheSize=1&pageHelp.endPage=5&_=1563587837130
通过多次使用不同的条件调用查询该接口可以发现该接口的一部分url参数如下:
isPagination
这名字一看就应该是是否分页,为了方便爬取,我们将该参数设为false
productId
股票代码
keyWord
关键字
securityType
证券类型
参数意义 | securityType |
---|---|
全部 | 0101,120100,020100,020200,120200 |
主板 | 0101 |
科创板 | 120100,020100,020200,120200 |
reportType
reportType2
报告类型
参数意义 | reportType | reportType2 |
---|---|---|
全部 | ALL | |
定期公告 | ALL | DQBG |
年报 | YEARLY | DQBG |
第一季度季报 | QUATER1 | DQBG |
半年报 | QUATER2 | DQBG |
第三季度季报 | QUATER3 | DQBG |
临时公告 | ALL | LSGG |
上市公司章程 | SHGSZC | LSGG |
发行上市公告 | FXSSGG | LSGG |
公司治理 | GSZL | LSGG |
股东大会会议 | GDDH | LSGG |
IPO公司公告 | IPOGG | LSGG |
其他 | QT | LSGG |
beginDate
开始日期
endDate
结束日期,接口每次查询的日期间隔不超过3年
以page
开头的参数应该都是和分页有关的,在设置isPagination=false
后这些参数都不用填写
直接调用查询接口,返回接口error系统繁忙,需要加上请求头Referer: http://www.sse.com.cn/disclosure/listedinfo/announcement/
,表示是在上交所网站页面上调用的接口。
以下是我用python写的批量下载上交所上市公司报告的代码,运行后会给每个股票建一个以股票代码命名的文件夹,存放相应的pdf文件。(温馨提示:下载全部报告需要巨大的磁盘空间)
import os
import time
import requests
from copy import deepcopyURL_SSE = "http://www.sse.com.cn/disclosure/listedinfo/announcement/"
# 股票
URL_SSE_STOCK = "http://www.sse.com.cn/js/common/ssesuggestdata.js"
# 基金
URL_SSE_FUND = "http://www.sse.com.cn/js/common/ssesuggestfunddata.js"
# E债券
URL_SSE_EBOND = "http://www.sse.com.cn/js/common/ssesuggestEbonddata.js"
# T债券
URL_SSE_TBOND = "http://www.sse.com.cn/js/common/ssesuggestTbonddata.js"
# 查询
URL_QUERY_COMPANY = "http://query.sse.com.cn/security/stock/queryCompanyBulletin.do"URL_PDF = "http://static.sse.com.cn"# 报告类型
REPORT_TYPE = {'全部': ('ALL', ''),'定期公告': ('ALL', 'DQBG'),'年报': ('YEARLY', 'DQBG'),'第一季度季报': ('QUATER1', 'DQBG'),'半年报': ('QUATER2', 'DQBG'),'第三季度季报': ('QUATER3', 'DQBG'),'临时公告': ('ALL', 'LSGG'),'上市公司章程': ('SHGSZC', 'LSGG'),'发行上市公告': ('FXSSGG', 'LSGG'),'公司治理': ('GSZL', 'LSGG'),'股东大会会议': ('GDDH', 'LSGG'),'IPO公司公告': ('IPOGG', 'LSGG'),'其他': ('QT', 'LSGG'),
}# 证券类型
SECURITY_TYPE = {'全部': '0101,120100,020100,020200,120200','主板': '0101','科创板': '120100,020100,020200,120200',
}HEADER = {'Referer': URL_SSE,'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
}URL_PARAM = {# 是否分页'isPagination': 'false','productId': '600000',# 关键字'keyWord': '','securityType': SECURITY_TYPE['全部'],'reportType2': 'DQBG','reportType': 'YEARLY','beginDate': '2016-07-17','endDate': '2019-07-17',
}def get_all_codes(url):res = requests.get(url)content = res.content.decode()tmp = content.split('_t.push({val:"')code, name, pinyin = [], [], []for i in tmp[1:]:item = i.split('"')code.append(item[0])name.append(item[2])pinyin.append(item[4])# print(code)return code, name, pinyindef get_pdf_url(code, begin_date, end_date, security_type='全部', report_type='年报'):url_param = deepcopy(URL_PARAM)url_param['productId'] = codeurl_param['securityType'] = SECURITY_TYPE[security_type]url_param['reportType2'] = REPORT_TYPE[report_type][1]url_param['reportType'] = REPORT_TYPE[report_type][0]url_param['beginDate'] = begin_dateurl_param['endDate'] = end_dateresult = requests.get(URL_QUERY_COMPANY, params=url_param, headers=HEADER).json()['result']return [(URL_PDF + i['URL'], i['BULLETIN_TYPE'], i['BULLETIN_YEAR'], i['SSEDATE']) for i in result]def save_pdf(code, pdf_title_urls, path='./'):file_path = os.path.join(path, code)if not os.path.isdir(file_path):os.makedirs(file_path)for url, r_type, year, date in pdf_title_urls:date = ''.join(date.split('-'))file_name = '_'.join([code, r_type, year, date]) + '.pdf'file_full_name = os.path.join(file_path, file_name)# print(file_full_name)rs = requests.get(url, stream=True)with open(file_full_name, "wb") as fp:for chunk in rs.iter_content(chunk_size=10240):if chunk:fp.write(chunk)def download_report(code):month_day = time.strftime('-%m-%d', time.localtime())year = int(time.strftime('%Y', time.localtime()))while True:year_3 = year - 3begin_date = str(year_3) + month_dayend_date = str(year) + month_daypdf_urls = get_pdf_url(code, begin_date, end_date)# for i in title_urls:# print(i)if pdf_urls:for i in range(1, 4):try:save_pdf(code, pdf_urls)breakexcept Exception as e:print(f'[{code}] 第{i}次尝试下载出错', e)else:print(f'[{code}] 下载失败')else:print(f'[{code}] 完毕')breakyear = year_3if year < 1900:breakdef main():stock_codes, _, _ = get_all_codes(URL_SSE_STOCK)len_stock_codes = len(stock_codes)for index, code in enumerate(stock_codes):print(f'股票总数:{len_stock_codes}, 已完成:{index} ', end='')download_report(code)print('任务完成')if __name__ == '__main__':main()
python批量下载上交所上市公司报告相关推荐
- python上市公司_Python批量下载上交所上市公司报告
上交所的上市公司报告搜索页面http://www.sse.com.cn/disclosure/listedinfo/announcement/ 通过查看页面调用的接口可以发现: 获取上交所全部股票代码 ...
- python批量下载深交所上市公司定期报告
python代码 import os import math import json import requests from copy import deepcopyURL = 'http://ww ...
- Python批量下载上交所、深交所年报或半年报并生成年报下载器exe文件
效果预览 完整代码 import requests import csv import time import re import math import osSTART_DATE =input('公 ...
- python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告
原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...
- python下载网页里面所有的图片-Python批量下载网页图片详细教程
很多朋友在网上查找批量下载图片的方法~发觉挺凌乱的,无从下手.这里绿茶小编就来跟大家分享下使用Python批量下载图片方法. 目标:爬取某个网站上n多页的链接,每个链接有n多张图片,每一页对应一个文件 ...
- 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...
原标题:自从会了Python在群里斗图就没输过,Python批量下载表情包! 导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Pyth ...
- python批量下载b站_python 批量下载bilibili视频的gui程序
运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...
- Python 批量下载SIGMOD,VLDB的论文 Mac OS
这里写自定义目录标题 Python 批量下载SIGMOD,VLDB的论文 Mac OS 实现 0.要爬取的网站 1.下载单篇论文 2.获得所有论文的链接 完整代码 Python 批量下载SIGMOD, ...
- 教你怎么使用python批量下载图片
教你怎么使用python批量下载图片 文章目录 教你怎么使用python批量下载图片 前言 一.运行环境 1. win10 2. python==3.7.2 二.需要用到的参数 1. download ...
最新文章
- windows编辑好的python代码在linux的vim编辑,缩进问题
- 美团面试失败(Java开发)
- linux centos7清除系统日志、历史记录、登录信息
- JAVA 解析JSON数据
- 【mybatis】插入操作更新id
- dom常用操作全后续会补充
- 数据库——环境初建改端口和密码(转)
- TCP第四次挥手为什么要等待2MSL
- 浅谈项目管理中的四要素
- 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
- 大数据 Hive spark Flink 关系
- Application package 'AndroidManifest.xml' must have a minimum of 2 segments.
- jQuery ajax 文件上传携带附加参数
- 空降领导想活下去必须做好的5点
- 《失业的程序员》(十二):潜意识的智商
- linux程序释放内存,Linux释放内存方法
- 地方麻将吉林过蛋玩法算法
- #边学边记 必修4 高项:对事的管理 第1章 项目立项管理 之 立项管理内容
- Rap2 模拟接口 常见规则示例
- CSAPP实验四:性能优化实验(Perflab)