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

Python调用yfinance下载股票数据触发SSLCertVerificationError求助

问题本质

你遇到的表层无数据报错是yfinance的异常捕获逻辑吞了底层SSL错误导致的误导性提示,核心原因是机构内网部署了HTTPS流量审计/解密网关,会替换出站请求的SSL证书做中间人检测,而requests+certifi默认的信任根证书库没有收录你所在机构的内部根证书,所以校验不通过。雅虎站点本身的公网证书是合法的,问题出在你所在网络的链路证书替换上,升级依赖自然解决不了问题。

合规解决方案(符合机构信息安全管控要求)

优先用下面两种方案,不会违反安全规定:

  • 方案1:将机构根证书加入certifi全局信任库
    1. 联系机构IT运维获取内网SSL解密用的根证书文件(通常为.pem/.crt格式)
    2. 执行以下代码获取当前Python环境的certifi证书存储路径:
    import certifi
    print(certifi.where())
    
    1. 打开上述路径输出的cacert.pem文件,把你拿到的机构根证书的完整文本内容追加到文件末尾,保存后直接运行原有yfinance代码即可,不需要修改业务代码。
  • 方案2:自定义请求会话指定证书路径(不修改全局配置)
    如果不想改动全局依赖的证书配置,可以给yfinance传入自定义的requests会话,单独指定证书路径:
    import yfinance as yf
    import requests
    
    # 替换为本地存储的机构根证书文件实际路径
    ORG_ROOT_CERT = "/local/path/to/your_org_root_ca.pem"
    req_session = requests.Session()
    req_session.verify = ORG_ROOT_CERT
    
    df = yf.download('AAPL', period='5d', session=req_session)
    
临时调试方案(严禁在生产/合规管控环境使用)

仅做本地临时调试时可以关闭证书校验,该操作违反信息安全管控要求,不建议长期使用:

import yfinance as yf
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

# 关闭证书校验的警告提示
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
req_session = requests.Session()
req_session.verify = False

df = yf.download('AAPL', period='5d', session=req_session)
验证方法

如果要确认确实是SSL问题,可以跳过yfinance直接用requests发起请求,会抛出明确的SSL校验错误,不会被yfinance的异常逻辑吞掉:

import requests
test_url = "https://query2.finance.yahoo.com/v8/finance/chart/AAPL"
response = requests.get(test_url)
print(response.status_code)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:01:01