问题解释

今天在写爬虫代码时,在调用requests模块的get方法时,报错很长一大串:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)……
经过查询,发现原来是因为我所爬取的网站地址中是https通道的。
Python 升级到 2.7.9 之后引入了一个新特性,当你urllib.urlopen或者requests.get一个是https协议的网站的时候,会验证一次该网站的SSL证书,当目标网站使用的是自签名的证书时,就会出现下面的错误。
TIM截图20191126184809.png

解决方案

这种情况,我们把SSL证书的验证给取消就可以,主要有以下两个方案。
方案一:针对urllib2.urlopen:多传一个context参数

context = ssl._create_unverified_context()
urllib2.urlopen(你要请求的地址, context=context)

方案二:针对requests.get:多传一个verify参数

resp = requests.get(你要请求的地址, verify=False)

设置之后,重新运行代码,控制台会输出一条警告,大意就是告诉我们“正在请求一个https网站,建议我们开启SSL证书验证”,我们可以忽略这条警告,警告下面就是网页的源代码了:
TIM截图20191126185427.png

最后修改:2019 年 11 月 26 日
如果觉得我的文章对你有用,请随意赞赏