Python爬取上交所年报并下载

Python 专栏收录该内容
49 篇文章 5 订阅

批量下载上交所年报及相关细节处理

一、使用工具

Python3.6、Pycharm

二、准备工作

import json
import requests
import re
import datetime
import csv 
f=open ('stkcd.csv',mode='w',encoding='gbk',newline='')
writer = csv.writer(f)
head=['stkcd']
writer.writerow(head)

PS:新建csv文件用于记录写入下载公司年报的代码,便于事后检查年报下载是否有遗漏。

三、主要代码

#要下载的年报日期可以根据需要调整,开始日期和结束日期间隔最好不要超过30日#
begin = datetime.date(2019,1,19)
end = datetime.date(2019,6,21)
for i in range((end - begin).days+1):
    searchDate = str(begin + datetime.timedelta(days=i))
    response=requests.get(
        'http://query.sse.com.cn/infodisplay/queryLatestBulletinNew.do?&jsonCallBack=jsonpCallback43752&productId=&reportType2=DQGG&reportType=YEARLY&beginDate='+searchDate+'&endDate='+searchDate+'&pageHelp.pageSize=25&pageHelp.pageCount=50&pageHelp.pageNo=1&pageHelp.beginPage=1&pageHelp.cacheSize=1&pageHelp.endPage=5&_=1561094157400'
        ,
        headers={'Referer':'http://www.sse.com.cn/disclosure/listedinfo/regular/'}
    )
	json_str = response.text[19:-1]
    data = json.loads(json_str)
    for report in data['result']:
        download_url = 'http://www.sse.com.cn/' + report['URL']
        if re.search('年度报告',report['title'],re.S):
            if re.search('摘要',report['title'],re.S):###避免下载一些年报摘要等不需要的文件###
                pass
            else:
                filename = report['security_Code']+report['title'] +searchDate+ '.pdf'
                print(filename)
                writer.writerow([report['security_Code']])###将公司代码写进csv文件,便于计数,非必须步骤###
                if re.search('ST',report['title'],re.S):###下载前要将文件名中带*号的去掉,因为文件命名规则不能带*号,否则程序会中断###
                    filename=report['security_Code']+'-ST' +searchDate+ '.pdf'
                    download_url = 'http://static.sse.com.cn/' + report['URL']
                    resource = requests.get(download_url, stream=True)
                    with open(filename, 'wb') as fd:
                        for y in resource.iter_content(102400):
                            fd.write(y)
                        print(filename, '完成下载')
                else:
                    download_url = 'http://static.sse.com.cn/' + report['URL']
                    resource = requests.get(download_url, stream=True)
                    with open(filename, 'wb') as fd:
                        for y in resource.iter_content(102400):
                            fd.write(y)
                        print(filename, '完成下载')

评论 28 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

谷曰十鑫

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值