请教一下,为什么只有我的电脑跑爬虫会出现 SSLCertVerificationError ?

2019-08-19 16:51:18 +08:00
 tankb52

具体报错信息如下

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

但是爬虫依然有问题,我电脑换用同事的网络也不行,走手机热点电信网络也不行。

我怀疑是我电脑上某个证书出问题了,怎么排查呢? 最开始在自己电脑上鼓捣爬虫时动过很多设置,这次脚本是同事发过来的,在别人电脑上跑都通过了。

5378 次点击
所在节点    Python
32 条回复
warcraft1236
2019-08-19 16:54:53 +08:00
是不是有代理啥的,劫持了证书。然后系统里边是不是安装了什么第三方证书,然后配置的还不对?只想到这些了,你的问题还真没遇到过
jackleeforce3615
2019-08-19 17:08:51 +08:00
def init_ssl():
ssl._create_default_https_context = ssl._create_unverified_context
jackleeforce3615
2019-08-19 17:09:20 +08:00
上面这个函数有没有执行过?
tankb52
2019-08-19 17:21:12 +08:00
@warcraft1236 #1
我也怀疑是这个原因,那如何排查呢?
tankb52
2019-08-19 17:22:57 +08:00
@jackleeforce3615 #2 加了也是一样的报错。
wongyusing
2019-08-19 17:27:53 +08:00
这个我没记错应该是证书问题。
试一下把 https 改成 http。
上次我就这样解决了
不行的话,查一下配置证书方面的知识
BigDogWang
2019-08-19 17:34:11 +08:00
你用的 request 吗?直接参数声明不做 ssl 检查就可以了
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*
然后重新编译, 安装
sodora
2019-08-19 17:59:22 +08:00
可能是系统时间问题。当前系统时间处在证书有效期之外。
tankb52
2019-08-19 18:26:33 +08:00
@BigDogWang #7
是添加 verify = False 吗?添加了就不会报错。但我还是想到的原因。
tankb52
2019-08-19 18:27:16 +08:00
@lusi1990 #8
windows 10,同事的 Mac 和 windows 10 上面也不会报错,所以不应该是 系统问题。
supervipcard
2019-08-19 18:45:05 +08:00
重装下 Python 试试
Keyes
2019-08-19 19:03:40 +08:00
@tankb52 把证书 dump 出来,看一下 issue 是谁的,可能性比较大的是缺少了中级证书,另一个就是网关上有中间人
tankb52
2019-08-19 19:23:02 +08:00
@Keyes #13

这个?为什么别人没有问题呢?

DO_NOT_TRUST_FiddlerRoot
DO_NOT_TRUST_BC
Created by http://www.fiddler2.com
tankb52
2019-08-19 19:23:20 +08:00
@supervipcard #12 重装过,无效。
Keyes
2019-08-19 19:34:01 +08:00
@tankb52 因为别人把 FiddlerRoot 证书导入到可信证书列表中了

你导入 Fiddler 证书的时候,不要让系统自动选择存储区域,点手动选择,然后指定到受信任的根证书颁发机构
lazyfighter
2019-08-19 20:24:45 +08:00
貌似需要导入 fiddler 的根证书才行
tankb52
2019-08-19 20:26:50 +08:00
@Keyes #16
导入后需要重启系统吗?我从 firefox 中导出 amazon.com 的证书到本地,然后双击安装,选择指定到了受信任的根证书颁发机构。
但是重新运行脚本还是报错。
huyinjie
2019-08-19 20:28:07 +08:00
可以尝试下用这个软件重置下网络 https://www.rizonesoft.com/downloads/complete-internet-repair/
Keyes
2019-08-19 21:55:01 +08:00
@tankb52 导 Fiddler 的证书,不是 Amazon 的

fiddler ca 可能在不信任的列表中,把它移到信任里也可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593225

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX