爬虫时报错“SSL: CERTIFICATE_VERIFY_FAILED” and " InsecureRequestWarning" 解决方法

  1. 使用pip安装第三方库时报CERTIFICATE_VERIFY_FAILED证书错误问题

出现此类问题是因为被国内防护墙所限制,修改镜像源即可解决:
如果使用 pip install xxxx -i http://pypi.douban.com/simple/ 无法下载还是出错的话使用下面的一个
例如:pip install requests -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com


  1. 产生这个问题的原因在于python本身,pyhon升级到2.7.9以后,引入了一个新特性,当使用urllib打开https的链接时,会检验一次ssl证书。而当目标网站使用的是自签名证书时,就会抛出urllib2.URLError的错误。(这里虚拟机就是用的自带的签名证书,所以我们从服务器连接vmware时会出现这种错误)。
    那么解决方案如下三种方式:

2.0 首先升级下requests库:

pip install --upgrade requests

然后将verify 设置为 False,Requests 将忽略对 SSL 证书的验证

import requests
url='https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limit=1000' 
page=requests.get(url,verify=False)

具体见官方文档:SSL证书验证
2.1.全局取消证书验证(当项目对安全性问题不太重视时,推荐使用,可以全局取消证书的验证,简易方便)

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.2.使用ssl创建未验证的上下文,在url中传入上下文参数(当项目整体非常重视安全问题时,推荐这种方式,可以局部取消证书验证)

import ssl
context = ssl._create_unverified_context()
# 将context传入url函数的context参数中,比如
urllib2.urlopen('目标网址',context=context).read()

这样就解决了ssl:certificate_verify_failed这个问题,成功运行脚本

  1. 移除验证后
    requests库提示警告:InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
    InsecureRequestWarning)
    虽然不影响程序运行,但是看着很不爽!
    第二天还是 update requests 库之后就不报错了,我也很奇怪啊!
    第一天的实际自己的解决方案:
import ssl
ssl._create_default_https_context=ssl._create_unverified_context
from urllib3.exceptions import InsecureRequestWarning
requests.urllib3.disable_warnings(InsecureRequestWarning)

就不会报错了,
网上这个已经过时:

from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

你可能感兴趣的:(爬虫时报错“SSL: CERTIFICATE_VERIFY_FAILED” and " InsecureRequestWarning" 解决方法)