目录
- 说明
- 年报筛选流程
- 代码
说明
首先从巨潮页面用八爪鱼爬取公告链接列表,但是该链接指向页面还有一个下载按钮且链接无法在详情页对下载直接元素提取,索性链接之间有关系可以直接修改。
下载路径分开保存的一种方法:如何使用python批量下载-用Python调用迅雷实现后台批量下载
还是要手动确认保存感觉有点不够方便
因为迅雷仍然碰到下载速度为0的问题所以用python补充下载,因为没有多线程所以会有点慢
(70条消息) python批量下载巨潮PDF年报_无敌的前任的博客-CSDN博客
迅雷和普通脚本都遇到反爬虫机制拒绝请求:
(73条消息) python批量下载年报(反爬虫应对版)_无敌的前任的博客-CSDN博客
关于网络环境影响导致pdf损坏的处理
年报筛选流程
1、通过简称:“文本包含”ST
2、通过标题:
(1)摘要、已取消
(2)英文版
(3)关于、公告、H股
3、通过代码升序、时间降序排序:
(1)先将以前年度的更新报告放到以前年度文件中(从最新一年开始处理)
(2)然后去重保留最新年报(一定要在上一小步之后)
(3)通过代码排除B股年报
代码
from win32com.client import Dispatch
#pip install win32compat
#pip install pywin32
import os
import re
import openpyxl
import time
def xunlei(url, downpath,filename):#运行之前记得在迅雷的设置中心勾选“一键下载”,不然会有弹框确认是否建立下载任务。#filename = url.split('/')[-1]thunder = Dispatch('ThunderAgent.Agent64.1')#thunder = Dispatch("ThunderAgent.Agent.1")thunder.AddTask(url, filename, downpath, "", "", -1, 0, 5)#thunder.AddTask(url)# AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数")thunder.CommitTasks()time.sleep(0.05)
def code_revise(code_cell):code=(code_cell.value)code=str(code)#用value就是数值,text不能用for i in range(1,6-len(code)+1):code='0'+codereturn code
def url_revise(url):#普通命令str.replace(old, new[, max])#old --将被替换的子字符串。.new --新字符串,用于替换old子字符串。max --可选字符串,替换不超过max次#re.sub(pattern, repl, string, count=0, flags=0)#参数含义依次为旧字符正则匹配式、新子串、原文、次数默认全部替换#print("url1:" + url)old1=re.compile(r'disclosure/detail\?stockCode=\d+&announcementId')old2=re.compile(r'orgId=\w+\d+&announcementTime')new1='announcement/download?bulletinId'new2='announceTime'url=re.sub(old1,new1,url)url = re.sub(old2, new2, url)#print("url2:"+url)return url
input= r'E:\huang\Documents'
os.chdir(input)
downpath=r'E:\Alark\Users\Desktop\年报'
downlist='2015-2016年其他行业.xlsx'
wb = openpyxl.load_workbook(downlist)
ws = wb.active
#active_sheet = wb.active
for row in ws.rows:if row[0].value==None:#print("row[0]:",row[0].value)breakelse:pass#print(code_revise(row[0]),row[2].value)filename=code_revise(row[0])+'_'+row[2].value+'.pdf'url=url_revise(row[4].value)xunlei(url, downpath, filename)
wb.save("cache.xlsx")