最近将工作的操作系统从Ubuntu切换到了MacOS。在运行爬虫脚本时,如果抓取HTTP的页面,则没有报错,但是当遇到HTTPS页面时,就出现了这么一个报错:
certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)
出现这个问题的原因是给这个网站的签发证书的CA证书没有在操作系统的root证书列表里。这里有2个可能:
- 证书是自签名证书(类似于之前的12306)
- CA是一个新的CA,操作系统里没有更新对应的CA证书
对于这个问题可以有2个解决办法:
- 在脚本中不校验服务端证书有效性;
- 更新操作系统的CA证书列表;
对应的操作如下:
添加不校验证书代码
在脚本的最开头位置增加如下代码:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
这样就可以不校验https证书的有效性了。适合抓取那些自签名HTTPS证书的网站。
更新操作系统的CA证书列表
在MacOS中,有一个很简单的办法来更新证书,步骤如下:
切换到Python目录,例如:
cd /Applications/Python 3.8
执行 Install Certificates.command
待程序执行完毕,重启爬虫,问题解决。