Python批量爬取网站Excel文件遇SSLError证书报错问题咨询
问题原因
核心遗漏点非常明确:你仅在获取目录页的requests.get()请求中添加了verify=False参数,循环内部用于下载Excel文件的requests.get()请求未配置该参数,默认会走SSL证书校验逻辑,因此触发证书验证失败报错,程序中断。
原代码还存在3个会影响批量下载稳定性的隐藏问题:
- 本地存储路径配置不规范:
os.chdir传入的路径包含多余空格、末尾冗余反斜杠,Windows环境下极易触发路径不存在、无写入权限的报错。 - 无异常捕获逻辑:单个文件下载失败会直接终止整个循环,无法继续处理后续文件。
- 未配置基础请求头、超时时间,容易被源站拦截,或因请求长时间挂起导致程序假死。
注意:
verify=False通过跳过证书校验绕过报错存在安全风险,仅建议在确认目标站点可信的测试场景使用。配置该参数后控制台会弹出urllib3的不安全请求警告,可通过代码手动关闭。
修正后可直接运行的代码
import requests from bs4 import BeautifulSoup import os import urllib3 # 关闭跳过证书校验触发的警告信息 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 替换为本地实际存储路径,不要保留多余空格、末尾冗余斜杠 local_save_path = r'C:\nyu_excel_archives' # 路径不存在时自动创建,避免报错 os.makedirs(local_save_path, exist_ok=True) os.chdir(local_save_path) base_archive_url = 'https://pages.stern.nyu.edu/~adamodar/pc/archives/' request_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' } # 拉取归档目录页 directory_resp = requests.get(base_archive_url, headers=request_headers, verify=False, timeout=30) soup = BeautifulSoup(directory_resp.text, 'html.parser') target_file_suffix = '.xls' for a_tag in soup.find_all('a'): file_href = a_tag.get('href') if not file_href or target_file_suffix not in file_href: continue file_name = a_tag.text.strip() full_download_url = base_archive_url + file_href print(f'正在下载: {file_name}') try: # 下载文件的请求必须同步配置verify=False file_resp = requests.get(full_download_url, headers=request_headers, verify=False, timeout=60) # 遇到4xx/5xx状态码直接抛出异常,避免下载到错误页面内容 file_resp.raise_for_status() with open(file_name, 'wb') as f: f.write(file_resp.content) print(f'下载完成: {file_name}') except Exception as e: print(f'文件{file_name}下载失败,错误: {str(e)},跳过当前文件继续后续任务') continue
内容的提问来源于stack exchange,提问作者Data
相关产品推荐
相关产品推荐

