如何用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
相关产品推荐
相关产品推荐

