具体报错信息如下
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 1
@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 验证
|