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

如何用Python下载Excel内PDF链接并保存,解决SSL报错问题

问题解决:Excel批量提取URL下载PDF及SSL报错处理

可以直接通过Python批量下载PDF文件,无需手动打开链接。

报错原因

你遇到的requests.exceptions.SSLError是目标网站SSL证书校验不通过导致的,dload库底层调用requests时默认开启证书校验,遇到证书配置不规范的站点就会抛出该错误。

完整可用代码

import pandas as pd
import requests
import os
import urllib3

# 关闭SSL校验产生的告警,可选
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 自定义配置
EXCEL_PATH = 'examples.xlsx'
SHEET_NAME = 'Reports and URL'
URL_COL = 'URL'
SAVE_DIR = 'F:/technophile/proj/'
# 伪装浏览器请求头,避免被站点反爬拦截
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 创建存储目录,不存在则自动新建
os.makedirs(SAVE_DIR, exist_ok=True)

# 读取Excel并对URL去重,保留首次出现的顺序
df = pd.read_excel(EXCEL_PATH, sheet_name=SHEET_NAME)
unique_url_list = df[URL_COL].drop_duplicates(keep='first').tolist()

# 按顺序批量下载
for idx, url in enumerate(unique_url_list, start=1):
    try:
        # 跳过空URL
        if pd.isna(url):
            continue
        # 发起请求,关闭SSL校验,设置超时避免卡死
        resp = requests.get(url, headers=HEADERS, verify=False, timeout=15)
        # 校验请求状态,4xx/5xx错误直接抛出异常
        resp.raise_for_status()
        
        # 生成文件名,优先取URL最后一段,否则按序号命名
        file_name = url.split('/')[-1]
        if not file_name.lower().endswith('.pdf'):
            file_name = f'report_{idx}.pdf'
        full_save_path = os.path.join(SAVE_DIR, file_name)
        
        # 写入本地文件
        with open(full_save_path, 'wb') as f:
            f.write(resp.content)
        print(f'下载完成:第{idx}个文件 {file_name}')
    except Exception as e:
        print(f'下载失败:第{idx}个文件 链接{url} 错误原因{str(e)}')

print('所有下载任务处理完毕')

注意事项

  • 如果目标站点需要登录才能访问PDF,你需要在HEADERS参数中补充对应站点的Cookie信息
  • 可以根据需求调整文件名命名规则,纯序号命名可以100%避免重名覆盖问题
  • 单个文件的超时时间可根据网络情况调整,避免大文件下载中断

内容的提问来源于stack exchange,提问作者technophile_3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04