问题解释
今天在写爬虫代码时,在调用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证书,当目标网站使用的是自签名的证书时,就会出现下面的错误。
解决方案
这种情况,我们把SSL证书的验证给取消就可以,主要有以下两个方案。
方案一:针对urllib2.urlopen:多传一个context参数
context = ssl._create_unverified_context()
urllib2.urlopen(你要请求的地址, context=context)
方案二:针对requests.get:多传一个verify参数
resp = requests.get(你要请求的地址, verify=False)
设置之后,重新运行代码,控制台会输出一条警告,大意就是告诉我们“正在请求一个https网站,建议我们开启SSL证书验证”,我们可以忽略这条警告,警告下面就是网页的源代码了: