参考博客:
6小时爬完上交所和深交所的年报问询函
Python爬取上交所年报并下载

一、任务描述

从上交所的官网上爬取年报PDF文档,并且转成TXT。

二、解决思路

1、解析网页获取年报的文件链接,并下载PDF
2、读取第一步的PDF 数据,并直接转成 TXT 格式的文字

三、网页分析

1、 数据包位置
进入要下载年报的界面,点击查看源码

2、结合日期获得不同的URL链接,但这一步得到的并不是PDF的下载链接,解析这个URL链接

3、结合第二步解析URL链接获得的网页内容,查找该日期对应的PDF下载链接

四、PDF转TXT

1、代码
这个直接搬运了第一篇参考博客的代码啦!

2、MAC系统GB编码的坑
PDF转TXT后得到的TXT为下图所示

解决方案是知乎上的一个回答:
Python解析pdf得到的中文CID字库如何变成utf-8

五、核心代码

1、下载PDF

import json
import requests
import re
import datetime
import csv
from urllib.request import urlopen
from urllib.request import Request
from urllib.request import quote
import requests
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser, PDFDocument
f=open ('stkcd.csv',mode='w',encoding='gbk',newline='')
writer = csv.writer(f)
head=['stkcd']
writer.writerow(head)#要下载的年报日期可以根据需要调整,开始日期和结束日期间隔最好不要超过30日#
begin = datetime.date(2019,12,1)
end = datetime.date(2019,12,30)
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={'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  ,'Referer':'http://www.sse.com.cn/disclosure/listedinfo/regular/'})#传送请求时把headers传入Request参数里,应付防盗链了;referer:将请求的的浏览器设置成本网站的json_str = response.text[19:-1]data = json.loads(json_str)# 把Json格式字符串解码转换成Python对象,得到dict格式  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                                 #do nothingelse: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): #把PDF文档写入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, '完成下载')

2、PDF转TXT

# fp = open('600193-ST2019-12-17.pdf','rb')
praser_pdf = PDFParser(fp)
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
praser_pdf.set_document(doc)
doc.set_parser(praser_pdf)
# 提供初始化密码doc.initialize("123456")
# 如果没有密码 就创建一个空的字符串
doc.initialize()
# 检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:raise PDFTextExtractionNotAllowed
else:# 创建PDf资源管理器 来管理共享资源rsrcmgr = PDFResourceManager()# 创建一个PDF参数分析器laparams = LAParams()# 创建聚合器device = PDFPageAggregator(rsrcmgr, laparams=laparams)# 创建一个PDF页面解释器对象interpreter = PDFPageInterpreter(rsrcmgr, device)# 循环遍历列表,每次处理一页的内容# doc.get_pages() 获取page列表for page in doc.get_pages():# 使用页面解释器来读取interpreter.process_page(page)# 使用聚合器获取内容layout = device.get_result()# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,for out in layout:# 判断是否含有get_text()方法,图片之类的就没有# if ``hasattr(out,"get_text"):docname = "上交所列表.txt"with open(docname,'a') as f:if isinstance(out, LTTextBoxHorizontal):results = out.get_text()print(results)f.write(results)

Python爬取上交所年报下载并转成TXT相关推荐

  1. Python爬取上交所年报并下载

    批量下载上交所年报及相关细节处理 一.使用工具 Python3.6.Pycharm 二.准备工作 import json import requests import re import dateti ...

  2. 【爬虫】用Python爬取公司年报1

    [目标]爬取公司年报 公司列表: bank_list = [ '中信银行', '兴业银行', '平安银行','民生银行', '华夏银行','交通银行', '中国银行', '招商银行', '浦发银行', ...

  3. 我用Python爬取了难下载的电子教材(内附代码)

    我用Python爬取了难下载的电子教材(内附代码) 第一次在CSDN上面分享经历,有点激动.本大二狗最近这段时间去不了学校又想看教材,不巧学习通上面的部分内容老师设置了不可下载啊.好在最近学习了一点P ...

  4. python爬取小说并下载_python爬取138看书网小说源码

    python爬取138看书网小说源码由论坛用户制作并分享,适用于138小说网,能够帮助用户爬取网站获取小说资源,软件提供分类搜索查找的功能,支持目录爬取,还附带书签功能,用户使用这款软件能够更加轻松地 ...

  5. Python爬取小说网站下载小说

    1前言 这个小程序是用来爬取小说网站的小说的,一般的盗版小说网站都是很好爬取的 因为这种网站基本没有反爬虫机制的,所以可以直接爬取 该小程序以该网站http://www.126shu.com/15/下 ...

  6. python爬取电影并下载

    一.概述 对于一个宅男,喜欢看电影,每次打开电影网站,各种弹出的广告,很是麻烦,还是要自己去复制下载链接到迅雷上粘贴并下载,这个过程中还有选择困难症;这一系列的动作让人甚是不爽,不如有下好的,点着看就 ...

  7. python爬取银行年报2

    目标站点         巨潮资讯网 目标 爬取银行的年报 接口分析 上一篇博客里的api失效了,这里重新分析一下: 1.每只股票(公司.银行)对应的ordid.category.code 该网站贴心 ...

  8. python 爬取数据还要下载scrapy吗_python网络爬虫之Scrapy

    本文分享的大体框架包含以下三部分 (1)首先介绍html网页,用来解析html网页的工具xpath (2)介绍python中能够进行网络爬虫的库(requests,lxml,scrapy等) (3)从 ...

  9. python爬取豫剧音乐下载链接

    IT Xiao Ang Zai 8月19号 版本:python3.64 编程软件:pycharm 接下来要学习网络爬虫了,那里面的东西是非常神奇的,平时我也有一些小爱好,比如听戏,谈到听戏的话,不如就 ...

  10. 使用Python爬取上交所问询函并查询相关股票发函日股价

    目录 前言 准备工作 json包的抓取 获取其他页数的数据 查询股价接口 代码编写 遍历爬取所有问询函 查询被发函公司发函日(第T日)后3天的股价 总结 参考 前言 最近实习需要做一些关于问询函的研究 ...

最新文章

  1. 非香农类信息不等式_ICLR2020|北大图灵班本科生满分论文:计算约束下有用信息的信息论...
  2. linux 内核可装载模块 版本检查机制
  3. java hiveconf_Java学习路线分享hive的运行方式
  4. 云计算学习总结(2)——服务器场景漏洞修复
  5. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...
  6. POJ 1005 I Think I Need a Houseboat
  7. 聊聊几款文件同步备份工具,你更喜欢哪一款呢?
  8. 图像特征提取 — LBP算法
  9. java怎么播放视频_java 播放视频
  10. 提问的智慧/ 如何优雅的提问
  11. 三维空间中鼠标点击选择线段的方法
  12. 扬帆际海:shopee店铺关键词广告怎么获得流量?
  13. 目标检测:传统目标检测方法
  14. c语言编程一对新出生的兔子,C语言 有一对兔子。从出生后第三个月起每个月都生一对兔子,小兔子长到三个月后又生一对小兔子,假如兔子都不死,问每个月的兔子总数为多少。...
  15. IntelliJ IDEA上debug模式启动
  16. linux怎样保存文件,linux不能保存文件如何解决
  17. Translation插件异常解决
  18. 开源流媒体服务器SRS环境搭建
  19. 从零开始的异界生活(偏了)从零开始搭建lamp服务ECShop,简单快速
  20. Go 文件操作(创建、打开、读、写)

热门文章

  1. 面试官问我知道的分布式事务,我一口气说了六种
  2. 我的世界服务器皮肤文件夹在哪里,我的世界青龙皮肤文件,启动侠皮肤文件夹在哪个文件夹...
  3. 阿里架构师的架构设计——详解高可用架构设计
  4. 4.OpenCV视频处理
  5. 相对湿度和绝对湿度的区别
  6. win10通过ping命令来检测网速
  7. 打开Charles浏览器无法上网
  8. Java就业知识点大全
  9. HDOJ-----5773The All-purpose Zero(LIS)
  10. rest-assured一些使用心得