使用pandas-datareader获取Yahoo数据时遇SSLError问题求助
解决pandas-datareader获取Yahoo金融数据时的SSLError问题
从你给出的报错信息和运行环境来看,这个SSLError的核心原因是你的32位Anaconda 3.7.3环境中缺少可用的SSL模块,导致程序无法建立HTTPS连接访问Yahoo的金融接口。下面我来拆解具体原因和可行的解决办法:
问题根源
- 32位Python环境的SSL兼容性缺陷:较老的32位Python 3.7.3版本在SSL模块的适配性上存在不足,当系统的SSL库版本和Python编译依赖的版本不匹配时,就会出现SSL模块无法加载的情况,进而无法发起HTTPS请求。
- Anaconda的SSL组件损坏或缺失:你的Anaconda安装过程中,
openssl这类关键的SSL依赖包可能没有正确安装,或者后续使用中出现了损坏。
分步解决办法
1. 修复Anaconda的SSL组件
先尝试修复现有环境的SSL组件,打开32位的Anaconda Prompt,执行以下命令:
# 更新openssl到最新兼容版本 conda update openssl # 强制重新安装openssl,确保组件完整 conda install -c anaconda openssl --force-reinstall
完成后重启你的Pycharm解释器,再运行代码测试是否解决问题。
2. 切换到64位Anaconda环境(推荐)
32位Python环境在现代操作系统上的兼容性越来越差,很多第三方库对32位的支持已经逐步停止。更彻底的解决办法是:
- 卸载当前的32位Anaconda 3.7.3
- 下载对应版本的64位Anaconda 3.7.3进行安装
- 重新安装
pandas-datareader:conda install pandas-datareader
64位环境的SSL支持通常更稳定,能从根源上避免这类兼容性问题。
3. 临时绕过SSL验证(仅测试用)
如果你只是临时需要测试代码,可以临时关闭SSL验证,但这会带来安全风险,绝对不要在生产环境使用。修改代码如下:
import pandas_datareader.data as web import datetime import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning # 禁用SSL验证警告 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # 创建关闭SSL验证的会话 session = requests.Session() session.verify = False start = datetime.datetime(2016, 2, 19) end = datetime.datetime(2016, 2, 22) # 传入自定义会话 gs = web.DataReader("078930.KS", "yahoo", start, end, session=session)
额外提示
Yahoo Finance的接口在近几年有过多次调整,旧版本的pandas-datareader可能存在兼容性问题,建议同时更新到最新版本:
pip install --upgrade pandas-datareader
内容的提问来源于stack exchange,提问作者user10102867
相关产品推荐
相关产品推荐

