爬巨潮网上市公司年报

从巨潮网按公告时间批量下载上市公司年报

import socket
import time
import csv
import requests
import datetime
from dateutil.relativedelta import relativedelta

socket.setdefaulttimeout(20)#这里对整个socket层设置超时时间。后续文件中如果再使用到socket,不必再设置  

#下载pdf公告的函数
def downloadpdf(url, file):
    resp = requests.get(url)
    f = open(file, 'wb')
    f.write(resp.content)
    f.close()
    
#新建csv文件,存储公告详细信息
csvf = open('年报.csv','a+', encoding='gbk', newline='')
writer = csv.writer(csvf)
writer.writerow(('公司简称','股票代码', '发布时间', '公告标题', '公告pdf下载地址'))

#新建txt文件,存储有问题的网址
csvf2 = open('年报pdf\\未下载的网址.csv','a+', encoding='gbk', newline='')
writer2 = csv.writer(csvf2)
writer2.writerow(('时间','网址'))

//以下从网站上看参数,
headers = {'User-Agent':' '}
cookies = {'Cookie': ' '}
url = ' '

//巨潮网貌似有一个bug,100页之后无法翻页,所以把爬取时间单位设置为月,以免漏掉公告。
bg = datetime.datetime.strptime('20190201', '%Y%m%d')
while bg>datetime.datetime.strptime('20181201', '%Y%m%d'):
    end = bg+relativedelta(months=1)
    bgstr = bg.strftime('%Y-%m-%d')
    endstr = end.strftime('%Y-%m-%d')
    daterange = bgstr+'~'+endstr

    for page in range(101): 
        try:
            data = {''}//网站上查参数          
            #发起请求,采集
            sleep_download_time =10
            time.sleep(sleep_download_time)
            resp = requests.post(url, params=data, headers=headers, cookies=cookies)
            pdfs = resp.json()['announcements']
            resp.close()
            for pdf in pdfs:
                announcementTitle = pdf['announcementTitle']
                if announcementTitle.find(u"摘要") ==-1:
                    secName = pdf['secName']
                    secCode =pdf['secCode']
                    adjunctUrl = 'http://static.cninfo.com.cn/'+pdf['adjunctUrl']
                    pdffile = '\\年报pdf\\'+'sec'+str(pdf['secCode'])+'_'+announcementTitle+'.pdf'
                    downloadpdf(url=adjunctUrl, file=pdffile)
                    print('sec'+str(pdf['secCode'])+'_'+announcementTitle+'.pdf已下载完成')
                    #announcementTypeName = pdf['announcementTypeName']
                    announcementTime = pdf['announcementTime']
                    #print(secName, secCode, announcementTime, announcementTitle, adjunctUrl, announcementTypeName)
                    writer.writerow((secName, secCode, announcementTime, announcementTitle, adjunctUrl))
        except:
            print('出问题的网址', resp.url)
            writer2.writerow((data['seDate'],resp.url))
    bg=bg-relativedelta(months=1)                              
    print(data['seDate']+'已下载完成')
csvf.close()
csvf2.close()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ——财经文章 “去哪里可以下载上市公司年报?” “如何批量下载上市公司年报?” “如何下载全部上市公司财务报表Ex...
    财报砖家阅读 5,038评论 0 2
  • 一、年报的获取 所有上市公司年报季报等都可以在其上市交易所网站能下载 上一年的年报可以在次年4月30日之后找到,对...
    klwei阅读 960评论 0 3
  • 公司名称:利欧集团股份有限公司 读后感言: 这周是A6学习的倒数第三周了,也是看招股说明书以来的第24周了。我还是...
    淡蓝色的天蝎阅读 1,187评论 0 1
  • 从小到大,你被你妈坑过多少回呢?你不爱吃饭挑食的时候,她夹着菜说,:“这菜炒的真不错,要不要来尝一尝呦?”戏谑的眼...
    苏农阅读 325评论 0 0
  • 凌晨,周围一片静寂。空气中弥漫着从被窝散发出来的温暖,很多人还在良辰美梦中,我们甚至能够听到均匀的呼吸声。...
    火玫瑰姐姐阅读 193评论 0 1

友情链接更多精彩内容