説明する
まず、タコを使用して Juchao ページからアナウンス リンク リストをクロールしますが、リンクはそのページを指しており、ダウンロード ボタンがあり、詳細ページのダウンロードからリンクを直接抽出することはできず、リンク間の関係は、直接変更することができます。
ダウンロード パスを個別に保存する方法: Python を使用してバッチ ダウンロードする方法 - Python を使用して Xunlei を呼び出し、バックグラウンドでバッチ ダウンロードを実現します。Xunlei ではまだダウンロードの問題が発生するため
、手動で保存を確認するのは少し不便です。
速度が 0 なので、Python を使用してダウンロードを補います。マルチスレッドがないため、少し遅くなります
(メッセージ 70 件) Python が Juchao PDF 年次報告書をバッチでダウンロードします_Invincible 前任者のブログ - CSDN ブログ
Thunder と通常のスクリプトの両方が遭遇しますクローラー対策メカニズムとリクエストの拒否:
(メッセージ 73 件) Python による年次報告書のバッチ ダウンロード (爬虫類対策バージョン
)
アニュアルレポートの審査プロセス
1. 略語順: "Text Contains" ST
2. タイトル順:
(1) 概要、中止
(2) 英語版
(3) About、お知らせ、H Share
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'+code
return 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)
break
else:
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")