V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tankb52
V2EX  ›  Python

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

  •  
  •   tankb52 · 2019-08-19 16:51:18 +08:00 · 5523 次点击
    这是一个创建于 1905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体报错信息如下

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

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

    fiddler ca 可能在不信任的列表中,把它移到信任里也可以
    ThirdFlame
        21
    ThirdFlame  
       2019-08-19 22:29:56 +08:00
    难道设置了全局代理到 fiddle ?
    tankb52
        22
    tankb52  
    OP
       2019-08-19 23:37:31 +08:00 via Android
    @Keyes
    @ThirdFlame

    公司的网络应该是统一走 fiddle 的,但是只有我的电脑出问题就很奇怪了。

    我明天再去看看
    ThirdFlame
        23
    ThirdFlame  
       2019-08-20 08:35:49 +08:00
    @tankb52 那就是你没有信任 fiddle 的证书问题而已。
    lusi1990
        24
    lusi1990  
       2019-08-20 09:41:26 +08:00
    原来是走了 fiddler, 你需要的是 fiddler 的证书
    resp = requests.get('https://ipinfo.io/json', verify='fiddler.cer',proxies=proxy)
    tankb52
        25
    tankb52  
    OP
       2019-08-20 10:45:04 +08:00
    @ThirdFlame #23
    @lusi1990 #24
    请问如何做呢?
    本地没有 fiddler.cer 。
    我执行后错误如下
    OSError: Could not find a suitable TLS CA certificate bundle, invalid path: fiddler.cer
    lusi1990
        26
    lusi1990  
       2019-08-20 11:22:58 +08:00   ❤️ 1
    @tankb52 这个是你们公司提供给你了, 名字可能不叫这个, fiddler 证书的默认名字应该是 "FiddlerRoot.cer", verify 是证书 "FiddlerRoot.cer" 的路径
    tankb52
        27
    tankb52  
    OP
       2019-08-20 11:34:34 +08:00
    @lusi1990 #26
    好的,多谢了。
    我去想办法,不行再找公司 IT.
    foxyier
        28
    foxyier  
       2019-08-21 09:54:50 +08:00
    把抓包工具关了再试一下呢。。
    tankb52
        29
    tankb52  
    OP
       2019-08-21 11:14:44 +08:00 via Android
    @foxyier
    公司层级的,不是我电脑上的
    foxyier
        30
    foxyier  
       2019-08-21 13:25:32 +08:00
    @tankb52 你都说了你同事电脑都没问题。那就肯定是你电脑的问题啊。。为啥问题是公司层级呢? 公司层级的话不是都应该有问题么
    tankb52
        31
    tankb52  
    OP
       2019-08-21 15:35:35 +08:00 via Android
    @foxyier
    我的意思是说抓包工具是公司层级上部署的,我关不掉。

    至于我电脑上确实是出问题,只是我找不到原因。
    dapan24678
        32
    dapan24678  
       2019-10-29 09:18:53 +08:00
    @warcraft1236 老哥 666,确实 本机开代理会影响 ssl 验证
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3070 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:47 · PVG 21:47 · LAX 05:47 · JFK 08:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.