python的网络套接字部分依赖外部标准ssl库。一般在Windows上这个问题不大,Linux上需要正确安装`libssl`并且有可用的ssl.h头文件,这是很多问题的源头,因为有些Linux发行版使用了过时的libssl版本,解决依赖冲突会很麻烦。如果系统中的ssl库版本不符合要求,则安装后的python不能使用ssl访问(pip的使用都会受到限制)。
在mac上我之前以为这个问题不大,因为bsd系统套接字部分的实现非常成熟,但是系统升级11.5以后就没再用过python写爬虫。今天再次写爬虫的时候发现报了很多关于ssl的错误。根本原因是缺乏本地CA证书,因此我们添加上就行了。
证书可以手动添加,但是有更简单的办法自动添加。
在python安装完毕的软件目录内,双击执行Install Certificates.command,会自动诊断并修复本地证书错误。
至此问题解决。上述办法是查StackOverflow找到的,CSDN上没有一个答案是靠谱的!
更新
今天在Windows上写爬虫居然也出现了类似的问题,而且不能通过上述脚本自动解决,手动处理过程倒也不算太复杂。在Windows平台上出现ssl错误的环境大多使用anaconda创建。
首先需要确定本地证书目录:
1 | >>>import ssl |
如果上述目录根本不存在,则手动创建到ssl目录一层。之后需要使用certifi模块获取合规的证书:
1 | >>>import certifi |
将上述cacert.pem文件拷贝到前述ssl文件夹即可。
本文作者:MyTech::Author