Python实现DataFrame列中PDF链接批量下载及原文件名保留问题
解决PDF直接链接下载失败并保留原文件名的问题
你提供的DataFrame中pdf列已经是PDF文件的直接下载链接,原代码无法下载文件的核心原因是:直接请求PDF链接返回的是二进制PDF内容,而非HTML页面,用BeautifulSoup解析这种内容找不到任何<a>标签,自然无法触发下载逻辑。
优化后的解决方案
不需要解析HTML页面,直接对每个PDF链接发起请求,同时从URL中提取原文件名保存即可,代码如下:
import requests import os # 确保保存目录存在,不存在则自动创建 save_directory = "C:/myfolder" if not os.path.exists(save_directory): os.makedirs(save_directory) # 遍历DataFrame中的所有PDF链接 for pdf_url in df["pdf"]: try: # 发起GET请求获取PDF内容,stream=True适合大文件下载 response = requests.get(pdf_url, stream=True) # 检查请求是否成功,若返回4xx/5xx状态码则抛出异常 response.raise_for_status() # 从URL中提取原文件名(取URL最后一段) original_filename = pdf_url.split('/')[-1] # 拼接完整保存路径 full_save_path = os.path.join(save_directory, original_filename) # 将二进制内容写入文件 with open(full_save_path, 'wb') as pdf_file: pdf_file.write(response.content) print(f"✅ {original_filename} 下载完成") except Exception as error: print(f"❌ 下载 {pdf_url} 失败: {str(error)}")
代码关键点说明
- 直接请求PDF链接:跳过不必要的HTML解析步骤,直接获取二进制文件内容
- 提取原文件名:通过
pdf_url.split('/')[-1]从URL末尾截取原文件名,保证文件名与源文件一致 - 目录预处理:提前创建保存目录,避免因目录不存在导致文件写入失败
- 异常处理:捕获请求过程中的错误(如链接失效、网络问题),避免单个链接失败中断整个下载流程
- 安全文件操作:使用
with open()上下文管理器,自动关闭文件,避免资源泄漏
内容的提问来源于stack exchange,提问作者MG Fern
相关产品推荐
相关产品推荐

