运行前先手动创建文件夹:D:/人民日报
[Python] 纯文本查看 复制代码 import os
import time
import requests
from PyPDF2 import PdfMerger
import concurrent.futures
# 下载单个PDF文件的函数
def download_pdf(url):
# 发送GET请求获取文件内容
response = requests.get(url)
# 检查响应状态码
if response.status_code != 200:
print(f"文件 {url} 不存在,跳过。")
return None
# 生成本地文件名
filename = os.path.join(pdf_folder, url.split('/')[-1])
# 将文件内容保存到本地磁盘
with open(filename, 'wb') as f:
f.write(response.content)
print(f"已下载文件 {filename}")
return filename
# 开始计时
start_time = time.time()
rq = input("请输入一个8位数日期,如20210101格式:")
year = rq[:4]
month = rq[4:6]
day = rq[6:]
pdf_urls = []
for i in range(1,10):
ii = ("0"+str(i))[-2:]
pdf_urls.append(f"http://paper.people.com.cn/rmrb/images/{year}-{month}/{day}/{ii}/rmrb{rq}{ii}.pdf")
# 创建保存PDF文件的文件夹
pdf_folder = rf"D:/经济日报/linshi"
os.makedirs(pdf_folder, exist_ok=True)
# 使用 ThreadPoolExecutor 来执行下载任务
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor: # 可以设置最大工作线程数
future_to_url = {executor.submit(download_pdf, url): url for url in pdf_urls}
# 检查下载状态并处理结果
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
data = future.result() # 获取结果,如果文件不存在则为None
except Exception as exc:
print(f"生成文件 {url} 时出错: {exc}")
else:
if data is not None: # 只计数成功的下载
print(f"已下载文件 {data}")
# 打印已下载的PDF文件数量
# 创建一个PdfFileMerger对象
merger = PdfMerger()
# 遍历文件夹中的所有PDF文件,并将它们添加到合并器中
for filename in os.listdir(pdf_folder):
if filename.endswith(".pdf"):
file_path = os.path.join(pdf_folder, filename)
merger.append(file_path)
# 定义输出PDF文件的路径和名称
pdf_folder2=rf"D:/人民日报"
output_filename = os.path.join(pdf_folder2, "人民日报" + rq + ".pdf")
# 将合并的PDF写入输出文件
with open(output_filename, "wb") as outfile:
merger.write(outfile)
merger.close()
# 删除原始PDF文件
for filename in os.listdir(pdf_folder):
if filename.endswith(".pdf") and filename != "merged.pdf":
file_path = os.path.join(pdf_folder, filename)
os.remove(file_path)
os.rmdir(pdf_folder)
print(f"合并完成,已生成 {output_filename}")
# 结束计时
end_time = time.time()
# 计算并打印运行时间
elapsed_time = end_time - start_time
print(f"总共下载PDF文件,用时 {elapsed_time:.2f} 秒。")
|