urlib库是爬虫的一大好手,不管请求网址,爬取网页还是下载文件,urlib都是十分好用,但是最进使用urlib请求一个网址时,发生如下错误:ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)
网上搜索解决方案后,发现浏览器识别证书不匹配,解决的办法也挺多,但是,最终看到Stack Overflow上面一个结果最令人满意,特记录下来。
自己代码如下:
from urllib.request import Request, urlopen
import os
url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)
req = Request(url)
res=urlopen(req)
结果运行时就出现了下面的错误:
File "D:\Anaconda3\lib\urllib\request.py", line 1320, in do_open
raise URLError(err)
urllib.error.URLError: error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)>
因为在使用urlib.open() 时,因为证书不匹配,导致请求失败,所以在请求中加入证书即可,具体代码见下方:
from urllib.request import Request, urlopen
import os
import ssl #增加的地方
url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)
req = Request(url)
res=urlopen(req)
# 增加证书,把context赋值为ssl的context即可
res = urlopen(req, context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))