python_巨潮年报pdf下载

目录

前置:

步骤:

step one: pip安装必要包,获取年报url列表

step two: 将查看url列表转换为pdf url

step three: 多进程下载pdf 


前置:

1 了解一些股票的基本面需要看历年年报,在巨潮一个个下载比较费时间,所以考虑用python把年报pdf下载下来。

2 如果要下载的股票个数很多,提前预备好大硬盘。本人下载深沪两市年报,大概150G。另外,要耐心,整个下载过程要十几二十小时,视电脑配置和网络而定。

步骤:

step one: pip安装必要包,获取年报url列表

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install akshare -i https://pypi.tuna.tsinghua.edu.cn/simple

pandas 本地处理数据、openpyxl excel表格处理需要这个包、akshare获取url接口(要了解akshare具体用法可以看其官网,直接百度搜素就能找到其官网)

1 获取股票代码列表,可以在通达信中获取。(通达信行情-》A股-》按“34”键-》导出表格)

2 写代码,遍历每个股票,一个股票一个Excel,记录该股票所有年报url。(巨潮最早能查到2000年)

def temp_000():import akshare as akpre_dir = r'E:/temp002/'with open('./stock_ticker.txt',mode='r',encoding='utf-8') as fr:contents = fr.read()stock_ticker_list = contents.split('\n')for symbol_str in stock_ticker_list:try:df = ak.stock_zh_a_disclosure_report_cninfo(symbol=symbol_str, market="沪深京",category="年报",start_date="20000101",end_date="20250315")df.to_excel(pre_dir+symbol_str+'.xlsx',engine='openpyxl')except:print(symbol_str)pass

3 这个过程大概半个小时到一个小时

 公告链接,这一列就是我们要的

step two: 将查看url列表转换为pdf url

step one获取的公告链接是网页查看的url,要下载pdf需要获取pdf对应的url

1 拿一个公告链接用浏览器打开,寻找pdf对应的url

http://www.cninfo.com.cn/new/disclosure/detail?stockCode=000001&announcementId=1222806509&orgId=gssz0000001&announcementTime=2025-03-15 00:00:00

 2 对比pdf url与公告链接的关系,将所有公告链接转换成pdf对应的url

def temp_001():pre_dir = r'E:/temp002/'tar_dir = r'E:/temp006/'file_list = os.listdir(pre_dir)for file_one in file_list:ticker = file_one[0:6]pre_file_path = pre_dir + file_onedf = pd.read_excel(pre_file_path,engine='openpyxl')url_list = df['公告链接'].to_list()pdf_url_list = []for u_one in url_list:u_one_00 = u_one.split('&')node_00 = u_one_00[1].replace('announcementId=','')node_01 = u_one_00[-1].replace('announcementTime=','')node_01 = node_01[0:10]tar_node = f'http://static.cninfo.com.cn/finalpage/{node_01}/{node_00}.PDF'pdf_url_list.append(tar_node)passpdf_url_list_str = '\n'.join(pdf_url_list)with open(f'{tar_dir}/{ticker}.txt', mode='w', encoding='utf-8') as fw:fw.write(pdf_url_list_str)passpass

3 这个过程几分钟,一个股票对应一个txt文件

step three: 多进程下载pdf 

要下载的pdf很多,但股票个数也就五千多个,本人搞了个简单的多线程

1 分5个线程,把txt文件分到五个文件夹里,文件夹以0、1、2、3、4命名

2 创建下载后放置pdf文件的文件夹,文件夹同样以0、1、3、4命名

3 写代码,执行。等待执行完毕,整个过程十几小时以上,看电脑配置和网络情况。

import os,threading'''
多线程下载财报
'''# 创建多个线程
def temp_thread():threads = []for i in range(5):thread = threading.Thread(target=temp_005,args=(i,))threads.append(thread)thread.start()passfor thread in threads:thread.join()print('all thread finished')pass# 执行项
def temp_005(i):import requestspre_dir = r'E:/temp006/'+str(i)+'/'tar_dir = r'E:/temp007/'+str(i)+'/'file_list = os.listdir(pre_dir)for file_one in file_list:ticker = file_one[0:6]tar_dir00 = tar_dir + ticker + os.path.sepif not os.path.exists(tar_dir00):os.mkdir(tar_dir00)url_file_path = pre_dir + file_onewith open(url_file_path,'r') as fr:url_str = fr.read()url_list = url_str.split('\n')try:for url_one in url_list:tar_file_name00 = url_one.split('/')tar_file_name = f"{tar_file_name00[-2]}_{tar_file_name00[-1]}.pdf"try:res = requests.get(url_one)if res.status_code == 200:with open(tar_dir00+tar_file_name,'wb') as fw:fw.write(res.content)passelse:error_str = f'下载失败,状态码:{res.status_code}。{url_one}\n'with open(f'./{i}.txt','a',encoding='utf-8') as fw:fw.write(error_str)except:print(url_one)passpassexcept:print(ticker)passprint('----------------end---',i)passif __name__ == '__main__':temp_thread()pass

执行完毕后,研究历年财报再也不用一个个下载啦,哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到1构建AI深度学习视频分析系统--基于YOLO 目标检测的动作序列检查系统:(2)消息队列与消息中间件

文章大纲 原始视频队列Python 内存视频缓存优化方案(4GB 以内)一、核心参数设计二、内存管理实现三、性能优化策略四、内存占用验证五、高级优化技巧六、部署建议检测结果队列YOLO检测结果队列技术方案一、技术选型矩阵二、核心实现代码三、性能优化策略四、可视化方案对比五…

React Native 如何使用 Expo 快速开发?

React Native是当下热门的跨平台移动开发框架,而Expo则是它的重要开发工具之一。Expo提供了一套完整的开发环境,使开发者无需安装Android Studio或Xcode也能快速运行React Native项目。它包含了众多内置API,如相机、地理位置、推送通知等&…

中考英语之09从句

1 宾语从句 定义 在主从复合句中充当宾语,位于及物动词、介词或复合谓语之后的从句。 引导词 综述: that(可省略)、if/whether、连接代词(what、which、who、whom、whose 等)和连接副词(when、…

平方矩阵问题

Ⅰ 回字形二维数组 #include <iostream> #include <iomanip> using namespace std; int main(){int n;while(cin>>n,n){for(int i0; i<n;i){for(int j0; j<n; j){int upi, downn-i1, leftj, rightn-j1;cout<<min(min(up,down),min(left,right)…

C++模版(复习)

1.泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础 2.函数模板的格式 template<typename T1,typename T2,…,typename Tn> 返回类型 函数名(参数列表) {   //函数体 } 3.template<class T1,class T2,…,class…

【sklearn 05】sklearn功能模块

sklearn功能模块 分类&#xff1a;识别某个对象属于那个类别回归&#xff1a;预测与对象相关联的连续值属性聚类&#xff1a;将相似对象自动分组降维&#xff1a;减少要考虑的随机变量的数量模型选择&#xff1a;比较、验证、选择参数和模型预处理&#xff1a;特征提取和归一化…

使用Qt创建悬浮窗口

在Qt中创建悬浮窗口&#xff08;如无边框、可拖动的浮动面板或提示框&#xff09;可以通过以下方法实现。以下是几种常见场景的解决方案&#xff1a; 方法1&#xff1a;使用无边框窗口 鼠标事件拖动 适用于自定义浮动工具窗口&#xff08;如Photoshop的工具栏&#xff09;。 …

《P4387 【深基15.习9】验证栈序列》

题目描述 给出两个序列 pushed 和 poped 两个序列&#xff0c;其取值从 1 到 n(n≤100000)。已知入栈序列是 pushed&#xff0c;如果出栈序列有可能是 poped&#xff0c;则输出 Yes&#xff0c;否则输出 No。为了防止骗分&#xff0c;每个测试点有多组数据&#xff0c;不超过 …

校园安全用电怎么保障?防触电装置来帮您

引言 随着教育设施的不断升级和校园用电需求的日益增长&#xff0c;校园电力系统的安全性和可靠性成为了学校管理的重要课题。三相智能安全配电装置作为一种电力管理设备&#xff0c;其在校园中的应用不仅能够提高电力系统的安全性&#xff0c;还能有效保障师生的用电安全&am…

【Git】--- 初识Git Git基本操作

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; Git 本篇我们来初步认识Git企业级应用是什么&#xff0c;有什么用以及Git基本操作。 &#x1f3e0; 初始Git 提出问题 在日常生活中&#xff0c;我们进行…

数据治理下半场:如何用文化变革撬动企业数字化转型?

数据治理下半场:如何用文化变革撬动企业数字化转型? 一、打破认知茧房:从"数据恐惧症"到"数据生产力"二、重构协作生态:从"部门墙"到"数据共同体"三、建立责任体系:从"无人认领"到"终身责任制"​四、点燃创新…

Chat-Driven Business:灵活交互的新范式

1. 引言 一次偶然的机会&#xff0c;读到了CSDN上的一篇文章&#xff0c;自定义markdown的展示(很遗憾&#xff0c;时间有点久&#xff0c;找不到具体的链接了&#xff09;&#xff0c;当时我觉得这很有启发意义&#xff0c;因为我做的cli_assistant就是以markdown的形式返回的…

嵌入式裸机设计--MCU常用裸机架构有哪些?

为什么是裸机设计 792125321入群学习更高效&#xff01; 在MCU&#xff08;微控制器单元&#xff09;裸机开发中&#xff0c;我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式&#xff0c;对我们开发一个小型项目来说及有好处&#xff01; 下面介绍…

python内置函数sum的用法

知识点 - sum 函数 基本语法 sum(iterable[, start]) iterable 是一个可迭代对象&#xff0c;例如列表、元组、集合等&#xff0c;其中的元素通常是数字类型&#xff08;整数或浮点数&#xff09;。 start 是一个可选参数&#xff0c;表示累加的起始值&#xff0c;默认为 0。…

编程语言的几种常见的分类方法

一、 按照编程范式分类 命令式编程语言 强调通过语句来改变程序状态&#xff0c;如 C、Pascal、Fortran 等。 面向对象编程语言 基于对象和类的概念&#xff0c;支持封装、继承和多态&#xff0c;如 Java、C、Python、Ruby 等。 函数式编程语言 注重不可变性和纯函数&#xf…

基于DeepSeek×MWORKS 2025a的ROM Builder自动化降阶实战

一、引言 当前&#xff0c;工业仿真领域正经历着前所未有的「智能焦虑」——当自动驾驶算法已能理解城市路网&#xff0c;当大模型开始设计蛋白质结构&#xff0c;这个驱动大国重器研发的核心领域&#xff0c;却仍在与千万级方程组成的庞杂模型艰难博弈。传统仿真降阶如同在数…

配置单区域OSPF实验和报文抓包和分析

一、配置单区域OSPF概念&#xff1a; &#xff08;1&#xff09;配置单区域OSPF&#xff08;Open Shortest Path First&#xff09;是一种常见的动态路由协议配置方式&#xff0c;主要用于在同一区域内实现路由信息的交换和路由表的更新。 &#xff08;2&#xff09;OSPF是一…

巴耶赫利专业俄语外贸网站建设

巴耶赫利是专业俄语外贸网站建设与俄语搜索引擎Yandex SEO优化服务商。巴耶赫利致力于帮助中国品牌出海俄罗斯&#xff0c;打开俄罗斯市场&#xff0c;提升品牌在俄罗斯的知名度和美誉度。 以下是对巴耶赫利相关服务的详细介绍&#xff1a; 一、巴耶赫利专业俄语外贸网站建设…

Netty基础—6.Netty实现RPC服务三

大纲 1.RPC的相关概念 2.RPC服务调用端动态代理实现 3.Netty客户端之RPC远程调用过程分析 4.RPC网络通信中的编码解码器 5.Netty服务端之RPC服务提供端的处理 6.RPC服务调用端实现超时功能 5.Netty服务端之RPC服务提供端的处理 (1)RPC服务提供端NettyServer (2)基于反射…

路由器与防火墙配置命令

路由器与防火墙配置命令 小明啊&#xff0c;你不是学计算机的嘛&#xff0c;叔叔家的路由器坏了&#xff0c;可以过来帮叔叔看看吗 命令可以用缩写&#xff0c;造就一堆容易造成歧义的缩写&#xff0c;比如add是address的缩写&#xff0c;sh是shutdown的缩写。 默认为Cisco路…