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

爬取维基百科调用pd.read_html报SSL证书过期错误如何修复

报错原因

抛出URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)>异常的核心原因是HTTPS请求阶段的SSL证书校验未通过,常见触发场景包括:

  • 本地Python环境内置的根证书库版本过旧,未收录维基百科当前使用的SSL证书对应的信任链,校验时误判定证书已过期
  • 所处网络环境(公司内网、校园网、开启了HTTPS抓包的本地网络)存在流量代理,替换了维基百科站点的原始SSL证书,导致本地校验逻辑判定证书不可信
  • pandas的read_html方法默认调用urllib发起网络请求,默认强制开启SSL证书强校验,只要校验不通过就会直接抛出异常终止请求,不会继续拉取页面内容。
修复方案

按推荐优先级从高到低排列:

  • 方案1:更新本地根证书库(最安全,无副作用,优先选择)
    不同系统操作如下:
    • Mac系统:找到本地对应Python版本的安装目录,双击运行Install Certificates.command脚本即可自动更新证书,脚本路径格式一般为/Applications/Python 3.x/Install Certificates.command,把3.x替换为你本地实际安装的Python版本号即可
    • Windows/Linux系统:直接在终端执行以下命令升级证书依赖包:
      pip install --upgrade certifi
      
    证书更新完成后重新运行原有代码即可正常拉取表格。
  • 方案2:临时关闭SSL证书校验(仅适合临时测试使用,存在流量被篡改、窃听的安全风险,不建议长期使用)
    修改原有代码,在发起请求前全局关闭urllib的证书校验逻辑即可,修改后完整代码如下:
    import pandas as pd
    import ssl
    
    # 临时关闭SSL证书校验
    ssl._create_default_https_context = ssl._create_unverified_context
    
    base_site = "https://en.wikipedia.org/wiki/List_of_national_capitals_by_population"
    tables = pd.read_html(base_site)
    # 提取到的tables[0]就是目标页面中按人口排序的各国首都表格
    
  • 方案3:如果是网络代理导致的证书校验失败,不需要关闭校验,只需要把你当前网络代理的根证书导入到Python环境的certifi信任证书库中,即可正常通过校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:21:26