上交所的上市公司报告搜索页面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批量下载上交所上市公司报告相关推荐

  1. python上市公司_Python批量下载上交所上市公司报告

    上交所的上市公司报告搜索页面http://www.sse.com.cn/disclosure/listedinfo/announcement/ 通过查看页面调用的接口可以发现: 获取上交所全部股票代码 ...

  2. python批量下载深交所上市公司定期报告

    python代码 import os import math import json import requests from copy import deepcopyURL = 'http://ww ...

  3. Python批量下载上交所、深交所年报或半年报并生成年报下载器exe文件

    效果预览 完整代码 import requests import csv import time import re import math import osSTART_DATE =input('公 ...

  4. python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告

    原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...

  5. python下载网页里面所有的图片-Python批量下载网页图片详细教程

    很多朋友在网上查找批量下载图片的方法~发觉挺凌乱的,无从下手.这里绿茶小编就来跟大家分享下使用Python批量下载图片方法. 目标:爬取某个网站上n多页的链接,每个链接有n多张图片,每一页对应一个文件 ...

  6. 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...

    原标题:自从会了Python在群里斗图就没输过,Python批量下载表情包! 导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Pyth ...

  7. python批量下载b站_python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ...

  8. Python 批量下载SIGMOD,VLDB的论文 Mac OS

    这里写自定义目录标题 Python 批量下载SIGMOD,VLDB的论文 Mac OS 实现 0.要爬取的网站 1.下载单篇论文 2.获得所有论文的链接 完整代码 Python 批量下载SIGMOD, ...

  9. 教你怎么使用python批量下载图片

    教你怎么使用python批量下载图片 文章目录 教你怎么使用python批量下载图片 前言 一.运行环境 1. win10 2. python==3.7.2 二.需要用到的参数 1. download ...

最新文章

  1. windows编辑好的python代码在linux的vim编辑,缩进问题
  2. 美团面试失败(Java开发)
  3. linux centos7清除系统日志、历史记录、登录信息
  4. JAVA 解析JSON数据
  5. 【mybatis】插入操作更新id
  6. dom常用操作全后续会补充
  7. 数据库——环境初建改端口和密码(转)
  8. TCP第四次挥手为什么要等待2MSL
  9. 浅谈项目管理中的四要素
  10. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  11. 大数据 Hive spark Flink 关系
  12. Application package 'AndroidManifest.xml' must have a minimum of 2 segments.
  13. jQuery ajax 文件上传携带附加参数
  14. 空降领导想活下去必须做好的5点
  15. 《失业的程序员》(十二):潜意识的智商
  16. linux程序释放内存,Linux释放内存方法
  17. 地方麻将吉林过蛋玩法算法
  18. #边学边记 必修4 高项:对事的管理 第1章 项目立项管理 之 立项管理内容
  19. Rap2 模拟接口 常见规则示例
  20. CSAPP实验四:性能优化实验(Perflab)

热门文章

  1. 设置密码8-16位大写字母+小写字母+数字+特殊字符
  2. 安装Realtek HD Audio Driver 失败
  3. RPA财务机器人的应用分类丨运行方式维度
  4. 虚拟机装Windows XP总结
  5. 广播站 PHP,校园广播站广播稿 (201812)期
  6. Ubuntu 测试两台电脑之间的网速
  7. vue电商开发记录1—实现电商图片放大镜,移入放大效果
  8. 【区块链技术工坊45期】陈军:用案例解析通证经济模型设计
  9. 基于MyEclipse+Tomcat+SqlServer+JSP开发得网上招标系统
  10. 蓝桥杯练习题 自行车停放