python_巨潮年报pdf下载

news2025/3/17 13:25:02

目录

前置:

步骤:

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 ak
    pre_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_one
        df = 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)
            pass
        pdf_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)
        pass
    pass

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()
        pass
    for thread in threads:
        thread.join()
    print('all thread finished')
    pass


# 执行项
def temp_005(i):
    import requests
    pre_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.sep
        if not os.path.exists(tar_dir00):
            os.mkdir(tar_dir00)
        url_file_path = pre_dir + file_one
        with 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)
                        pass
                    else:
                        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)
                pass
            pass
        except:
            print(ticker)
        pass
    print('----------------end---',i)
    pass


if __name__ == '__main__':
    temp_thread()
    pass

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

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

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

相关文章

为什么需要使用十堰高防服务器?

十堰高防服务器的核心价值与应用必要性 一、‌应对复杂攻击的防御能力‌ ‌T级DDoS攻击防护‌ 十堰高防服务器搭载 ‌T级清洗中心‌,支持智能流量调度与分层处理,可抵御 ‌800Gbps-1.2Tbps‌ 的大规模混合攻击(如SYN Flood、UDP反射&#xff…

人工智能中的线性代数基础详解

‌ 线性代数是人工智能领域的重要数学基础之一,是人工智能技术的底层数学支柱,它为数据表示、模型构建和算法优化提供了核心工具。其核心概念与算法应用贯穿数据表示、模型训练及优化全过程。更多内容可看我文章:人工智能数学基础详解与拓展-CSDN博客 一、基本介绍 …

【毕业论文格式】word分页符后的标题段前间距消失

文章目录 【问题描述】 分页符之后的段落开头,明明设置了标题有段前段后间距,但是没有显示间距: 【解决办法】 选中标题,选择边框 3. 选择段前间距,1~31磅的一个数 结果

【蓝桥杯每日一题】3.16

🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x 目录 3.9 高精度算法 一、高精度加法 题目链接: 题目描述: 解题思路: 解题代码: 二、高精度减法 题目链接: 题目描述&…

2.7 滑动窗口专题:串联所有单词的子串

LeetCode 30. 串联所有单词的子串算法对比分析 1. 题目链接 LeetCode 30. 串联所有单词的子串 2. 题目描述 给定一个字符串 s 和一个字符串数组 words,words 中所有单词长度相同。要求找到 s 中所有起始索引,使得从该位置开始的连续子串包含 words 中所…

电脑实用小工具--VMware常用功能简介

一、创建、编辑虚拟机 1.1 创建新的虚拟机 详见文章新创建虚拟机流程 1.2 编辑虚拟机 创建完成后,点击编辑虚拟机设置,可对虚拟机内存、处理器、硬盘等各再次进行编辑设置。 二、虚拟机开关机 2.1 打开虚拟机 虚拟机创建成功后,点击…

为训练大模型而努力-分享2W多张卡通头像的图片

最近我一直在研究AI大模型相关的内容,想着从现在开始慢慢收集各种各样的图片,万一以后需要训练大模型的时候可以用到,或者自己以后也许会需要。于是决定慢慢收集这些图片,为未来的学习和训练大模型做一些铺垫,哈哈。 …

JVM 垃圾回收器的选择

一:jvm性能指标吞吐量以及用户停顿时间解释。 二:垃圾回收器的选择。 三:垃圾回收器在jvm中的配置。 四:jvm中常用的gc算法。 一:jvm性能指标吞吐量以及用户停顿时间解释。 在 JVM 调优和垃圾回收器选择中&#xff0…

使用GPTQ量化Llama-3-8B大模型

使用GPTQ量化8B生成式语言模型 服务器配置:4*3090 描述:使用四张3090,分别进行单卡量化,多卡量化。并使用SGLang部署量化后的模型,使用GPTQ量化 原来的模型精度为FP16,量化为4bit 首先下载gptqmodel量化…

2025-03-16 学习记录--C/C++-PTA 习题4-2 求幂级数展开的部分和

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 习题4-2 求幂级数展开的部分和 已知函数e^x可以展开为幂级数1xx^2/2!x^3/3!⋯x^k/k!⋯。现给定一个实数x&a…

【C#】Http请求设置接收不安全的证书

在进行HTTP请求时&#xff0c;出现以下报错&#xff0c;可设置接收不安全证书跳过证书验证&#xff0c;建议仅测试环境设置&#xff0c;生产环境可能会造成系统漏洞 /// <summary> /// HttpGet请求方法 /// </summary> /// <param name"requestUrl"&…

AP AR

混淆矩阵 真实值正例真实值负例预测值正例TPFP预测值负例FNTN &#xff08;根据阈值预测&#xff09; P精确度计算&#xff1a;TP/(TPFP) R召回率计算&#xff1a;TP/(TPFN) AP 综合考虑P R 根据不同的阈值计算出不同的PR组合&#xff0c; 画出PR曲线&#xff0c;计算曲线…

Leetcode-1278.Palindrome Partitioning III [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-1278.Palindrome Partitioning IIIhttps://leetcode.com/problems/palindrome-partitioning-iii/description/1278. 分割回文串 III - 力扣&#xff08;LeetCode&#xff09;1278. 分割回文串 III - 给你一个由小写…

C++特性——智能指针

为什么需要智能指针 对于定义的局部变量&#xff0c;当作用域结束之后&#xff0c;就会自动回收&#xff0c;这没有什么问题。 当时用new delete的时候&#xff0c;就是动态分配对象的时候&#xff0c;如果new了一个变量&#xff0c;但却没有delete&#xff0c;这会造成内存泄…

ctf web入门知识合集

文章目录 01做题思路02信息泄露及利用robots.txt.git文件泄露dirsearch ctfshow做题记录信息搜集web1web2web3web4web5web6web7web8SVN泄露与 Git泄露的区别web9web10 php的基础概念php的基础语法1. PHP 基本语法结构2. PHP 变量3.输出数据4.数组5.超全局变量6.文件操作 php的命…

MySQL-存储过程和自定义函数

存储过程 存储过程&#xff0c;一组预编译的 SQL 语句和流程控制语句&#xff0c;被命名并存储在数据库中。存储过程可以用来封装复杂的数据库操作逻辑&#xff0c;并在需要时进行调用。 使用存储过程 创建存储过程 create procedure 存储过程名() begin存储过程的逻辑代码&…

图——表示与遍历

图的两种主要表示方法 图有两种常用的表示方法&#xff0c;一种是邻接表法&#xff08;adjacency-list&#xff09;&#xff0c;另一种是邻接矩阵法&#xff08;adjacency-matrix&#xff09;。 邻接表法储存数据更紧凑&#xff0c;适合稀疏的图&#xff08;sparse graphs&am…

新手村:数据预处理-异常值检测方法

机器学习中异常值检测方法 一、前置条件 知识领域要求编程基础Python基础&#xff08;变量、循环、函数&#xff09;、Jupyter Notebook或PyCharm使用。统计学基础理解均值、中位数、标准差、四分位数、正态分布、Z-score等概念。机器学习基础熟悉监督/无监督学习、分类、聚类…

ChatGPT-4

第一章&#xff1a;ChatGPT-4的技术背景与核心架构 1.1 生成式AI的发展脉络 生成式人工智能&#xff08;Generative AI&#xff09;的演进历程可追溯至20世纪50年代的早期自然语言处理研究。从基于规则的ELIZA系统到统计语言模型&#xff0c;再到深度学习的革命性突破&#x…

C语言_数据结构总结9:树的基础知识介绍

1. 树的基本术语 - 祖先&#xff1a;考虑结点K&#xff0c;从根A到结点K的唯一路径上的所有其它结点&#xff0c;称为结点K的祖先。 - 子孙&#xff1a;结点B是结点K的祖先&#xff0c;结点K是B的子孙。结点B的子孙包括&#xff1a;E,F,K,L。 - 双亲&#xff1a;路径上…