具体报错信息如下
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 warcraft1236 2019-08-19 16:54:53 +08:00 是不是有代理啥的,劫持了证书。然后系统里边是不是安装了什么第三方证书,然后配置的还不对?只想到这些了,你的问题还真没遇到过 |
2 jackleeforce3615 2019-08-19 17:08:51 +08:00 def init_ssl(): ssl._create_default_https_cOntext= ssl._create_unverified_context |
3 jackleeforce3615 2019-08-19 17:09:20 +08:00 上面这个函数有没有执行过? |
![]() | 4 tankb52 OP @warcraft1236 #1 我也怀疑是这个原因,那如何排查呢? |
![]() | 5 tankb52 OP @jackleeforce3615 #2 加了也是一样的报错。 |
6 wongyusing 2019-08-19 17:27:53 +08:00 这个我没记错应该是证书问题。 试一下把 https 改成 http。 上次我就这样解决了 不行的话,查一下配置证书方面的知识 |
![]() | 7 BigDogWang 2019-08-19 17:34:11 +08:00 你用的 request 吗?直接参数声明不做 ssl 检查就可以了 |
![]() | 8 lusi1990 2019-08-19 17:36:33 +08:00 是 linux 吗?是自己编译的吗?如果是的话 sudo apt-get install -y openssl sudo apt-get install -y libssl-dev sudo apt-get install -y zlib* 然后重新编译, 安装 |
9 sodora 2019-08-19 17:59:22 +08:00 via Android 可能是系统时间问题。当前系统时间处在证书有效期之外。 |
![]() | 10 tankb52 OP @BigDogWang #7 是添加 verify = False 吗?添加了就不会报错。但我还是想到的原因。 |
![]() | 11 tankb52 OP @lusi1990 #8 windows 10,同事的 Mac 和 windows 10 上面也不会报错,所以不应该是 系统问题。 |
12 supervipcard 2019-08-19 18:45:05 +08:00 重装下 Python 试试 |
![]() | 14 tankb52 OP |
![]() | 15 tankb52 OP @supervipcard #12 重装过,无效。 |
16 Keyes 2019-08-19 19:34:01 +08:00 |
17 lazyfighter 2019-08-19 20:24:45 +08:00 貌似需要导入 fiddler 的根证书才行 |
![]() | 18 tankb52 OP |
![]() | 19 huyinjie 2019-08-19 20:28:07 +08:00 可以尝试下用这个软件重置下网络 https://www.rizonesoft.com/downloads/complete-internet-repair/ |
20 Keyes 2019-08-19 21:55:01 +08:00 |
21 ThirdFlame 2019-08-19 22:29:56 +08:00 难道设置了全局代理到 fiddle ? |
![]() | 22 tankb52 OP |
23 ThirdFlame 2019-08-20 08:35:49 +08:00 @tankb52 那就是你没有信任 fiddle 的证书问题而已。 |
![]() | 24 lusi1990 2019-08-20 09:41:26 +08:00 原来是走了 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 2019-08-20 11:22:58 +08:00 ![]() @tankb52 这个是你们公司提供给你了, 名字可能不叫这个, fiddler 证书的默认名字应该是 "FiddlerRoot.cer", verify 是证书 "FiddlerRoot.cer" 的路径 |
28 foxyier 2019-08-21 09:54:50 +08:00 把抓包工具关了再试一下呢。。 |
30 foxyier 2019-08-21 13:25:32 +08:00 @tankb52 你都说了你同事电脑都没问题。那就肯定是你电脑的问题啊。。为啥问题是公司层级呢? 公司层级的话不是都应该有问题么 |
![]() | 31 tankb52 OP |
![]() | 32 dapan24678 2019-10-29 09:18:53 +08:00 @warcraft1236 老哥 666,确实 本机开代理会影响 ssl 验证 |