目录

python_巨潮年报pdf下载

python_巨潮年报pdf下载


前置:

1 了解一些股票的基本面需要看历年年报,在巨潮一个个下载比较费时间,所以考虑用python把年报pdf下载下来。 2 如果要下载的股票个数很多,提前预备好大硬盘。本人下载深沪两市年报,大概150G。另外,要耐心,整个下载过程要十几二十小时,视电脑配置和网络而定。

步骤:

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

pip install pandas -i pip install openpyxl -i pip install akshare -i 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 这个过程大概半个小时到一个小时 https://i-blog.csdnimg.cn/direct/7fad9703e857459c9e2f40a868e57aa2.png https://i-blog.csdnimg.cn/direct/f9cf04e21d694bfd908a720186096400.png 公告链接,这一列就是我们要的

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

step one获取的公告链接是网页查看的url,要下载pdf需要获取pdf对应的url 1 拿一个公告链接用浏览器打开,寻找pdf对应的url 00:00:00 https://i-blog.csdnimg.cn/direct/e3858146a0ad44bb832744cd3ec85842.png 2 对比pdf url与公告链接的关系,将所有公告链接转换成pdf对应的urlhttps://i-blog.csdnimg.cn/direct/4cf84d48db5e44a480c9a58d568a1fee.png 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’ 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文件 https://i-blog.csdnimg.cn/direct/8b21fc819341445390044067e8308886.png

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 执行完毕后,研究历年财报再也不用一个个下载啦,哈哈哈