
具体报错信息如下
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.amazon.com', port=443): Max retries exceeded with url: /product-reviews/B07GBP3GH9/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)' 爬一些亚马逊上评论会出现这个错误(是自家产品,不涉及侵权),在 r = requests.get(self.url + str(page_n), headers=header, timeout=30)最后面添加, verify = False 就不会报错。
只在我的电脑上出现这个问题,其他同事的电脑上运行正常。
同时发现我电脑上pip install moudlename时也会报这个错误。搜索以后已经将 pip 升级到 19.2.2,或者说是所有的模块都已更新到最新。 最后解决方案是在 pip.ini 中加入以下内容
[global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org 但是爬虫依然有问题,我电脑换用同事的网络也不行,走手机热点电信网络也不行。
我怀疑是我电脑上某个证书出问题了,怎么排查呢? 最开始在自己电脑上鼓捣爬虫时动过很多设置,这次脚本是同事发过来的,在别人电脑上跑都通过了。
1 daiqiangbudainiu Aug 19, 2019 是不是有代理啥的,劫持了证书。然后系统里边是不是安装了什么第三方证书,然后配置的还不对?只想到这些了,你的问题还真没遇到过 |
2 jackleeforce3615 Aug 19, 2019 def init_ssl(): ssl._create_default_https_cOntext= ssl._create_unverified_context |
3 jackleeforce3615 Aug 19, 2019 上面这个函数有没有执行过? |
4 tankb52 OP @warcraft1236 #1 我也怀疑是这个原因,那如何排查呢? |
5 tankb52 OP @jackleeforce3615 #2 加了也是一样的报错。 |
6 wongyusing Aug 19, 2019 这个我没记错应该是证书问题。 试一下把 https 改成 http。 上次我就这样解决了 不行的话,查一下配置证书方面的知识 |
7 BigDogWang Aug 19, 2019 你用的 request 吗?直接参数声明不做 ssl 检查就可以了 |
8 lusi1990 Aug 19, 2019 是 linux 吗?是自己编译的吗?如果是的话 sudo apt-get install -y openssl sudo apt-get install -y libssl-dev sudo apt-get install -y zlib* 然后重新编译, 安装 |
9 sodora Aug 19, 2019 via Android 可能是系统时间问题。当前系统时间处在证书有效期之外。 |
10 tankb52 OP @BigDogWang #7 是添加 verify = False 吗?添加了就不会报错。但我还是想到的原因。 |
12 supervipcard Aug 19, 2019 重装下 Python 试试 |
14 tankb52 OP |
15 tankb52 OP @supervipcard #12 重装过,无效。 |
16 Keyes Aug 19, 2019 |
17 lazyfighter Aug 19, 2019 貌似需要导入 fiddler 的根证书才行 |
18 tankb52 OP |
19 huyinjie Aug 19, 2019 可以尝试下用这个软件重置下网络 https://www.rizonesoft.com/downloads/complete-internet-repair/ |
21 ThirdFlame Aug 19, 2019 难道设置了全局代理到 fiddle ? |
22 tankb52 OP |
23 ThirdFlame Aug 20, 2019 @tankb52 那就是你没有信任 fiddle 的证书问题而已。 |
24 lusi1990 Aug 20, 2019 原来是走了 fiddler, 你需要的是 fiddler 的证书 resp = requests.get('https://ipinfo.io/json', verify='fiddler.cer',proxies=proxy) |
25 tankb52 OP @ThirdFlame #23 @lusi1990 #24 请问如何做呢? 本地没有 fiddler.cer 。 我执行后错误如下 OSError: Could not find a suitable TLS CA certificate bundle, invalid path: fiddler.cer |
26 lusi1990 Aug 20, 2019 @tankb52 这个是你们公司提供给你了, 名字可能不叫这个, fiddler 证书的默认名字应该是 "FiddlerRoot.cer", verify 是证书 "FiddlerRoot.cer" 的路径 |
28 foxyier Aug 21, 2019 把抓包工具关了再试一下呢。。 |
32 dapan24678 Oct 29, 2019 @warcraft1236 老哥 666,确实 本机开代理会影响 ssl 验证 |