You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:32:28