You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows系统Python urllib.urlopen SSL证书验证失败问题求助

解决Windows下Anaconda Python 3.6爬虫SSL证书验证失败问题

嘿,我来帮你搞定这个SSL证书报错的问题~你遇到的URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777),是因为你的Anaconda环境里缺少信任这些HTTPS网站的根证书,而http://fivethirtyeight.com/是HTTP协议,不需要证书验证所以能正常运行。

下面给你几个针对Windows Anaconda环境的解决方法,按推荐程度排序:

方法1:更新Anaconda的证书包(最安全推荐)

Anaconda自带的certifi包管理着信任的根证书,更新它就能解决大部分证书问题:

  • 打开Anaconda Prompt(在开始菜单的Anaconda3文件夹里能找到)
  • 运行以下命令安装/更新certifi:
    conda install -c anaconda certifi
    
  • 按提示输入y确认安装,完成后重启你的Python编辑器/终端,再运行爬虫代码试试。

方法2:手动指定证书路径

如果方法1没生效,可以手动指定Anaconda自带的证书文件路径:

  1. 找到你的Anaconda安装目录下的cacert.pem文件,默认路径大概是:
    C:\Users\[你的用户名]\Anaconda3\Lib\site-packages\certifi\cacert.pem
    
    替换[你的用户名]为你Windows账户的名字。
  2. 修改你的代码,添加SSL上下文指定证书:
    import urllib.request
    import ssl
    import urllib3
    from bs4 import BeautifulSoup
    
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    # 指定证书路径
    ssl_context = ssl.create_default_context(cafile=r'C:\Users\[你的用户名]\Anaconda3\Lib\site-packages\certifi\cacert.pem')
    f = urllib.request.urlopen(url, context=ssl_context)
    print(f.read(300))
    soup = BeautifulSoup(f, 'lxml')
    

方法3:临时禁用SSL验证(仅测试用,不推荐)

这个方法会跳过证书验证,虽然能解决问题,但会让你的请求处于不安全状态,适合临时测试:
修改代码使用不验证的SSL上下文:

import urllib.request
import ssl
import urllib3
from bs4 import BeautifulSoup

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 创建不验证SSL的上下文
ssl_context = ssl._create_unverified_context()
f = urllib.request.urlopen(url, context=ssl_context)
print(f.read(300))
soup = BeautifulSoup(f, 'lxml')

或者改用urllib3的请求方式:

import urllib3
from bs4 import BeautifulSoup

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 禁用证书验证
http = urllib3.PoolManager(cert_reqs='CERT_NONE')
response = http.request('GET', url)
print(response.data[:300])
soup = BeautifulSoup(response.data, 'lxml')

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

火山引擎 最新活动