抓取:SSL:http://en.wikipedia.org 的 CERTIFICATE_VERIFY_FAILED 错误 [重复]

2025-01-15 08:45:00
admin
原创
94
摘要:问题描述:我正在练习“使用 Python 进行 Web 抓取”中的代码,但一直遇到这个证书问题:from urllib.request import urlopen from bs4 import BeautifulSoup import re pages = set() def getLinks(pa...

问题描述:

我正在练习“使用 Python 进行 Web 抓取”中的代码,但一直遇到这个证书问题:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = urlopen("http://en.wikipedia.org"+pageUrl)
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href'] 
                print(newPage) 
                pages.add(newPage) 
                getLinks(newPage)
getLinks("")

错误是:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1049)>

顺便说一句,我也在练习 scrapy,但一直遇到问题:未找到命令:scrapy(我尝试了网上的各种解决方案,但都没有用……真的很令人沮丧)


解决方案 1:

有一次我被这个问题困扰。如果你使用的是 macOS,请转到 Macintosh HD > 应用程序 > Python3.6 文件夹(或你使用的任何版本的 Python)> 双击“Install Certifications.command”文件。:D

解决方案 2:

要使用未经验证的 SSL,您可以将其添加到您的代码中:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

解决方案 3:

此终端命令:

open /Applications/Python 3.7/Install Certificates.command

在此处找到:
https: //stackoverflow.com/a/57614113/6207266

帮我解决了。使用我的配置

pip install --upgrade certifi

没有影响。

解决方案 4:

解决此问题:

您需要做的就是安装 Python 证书!这是 macOS 上的常见问题。

打开这些文件:

Install Certificates.command
Update Shell Profile.command

只需运行这两个脚本,您就不会再遇到这个问题。

希望这有帮助!

解决方案 5:

对于新手用户,您可以进入“应用程序”文件夹并展开“Python 3.7”文件夹。现在首先运行(或双击)“安装证书”命令,然后运行“更新 Shell 配置文件”命令

在此处输入图片描述

解决方案 6:

这是唯一对我在 Windows PC 上有用的解决方案

pip install pip_system_certs
pip install python-certifi-win32

解决方案 7:

Install Certificates.command如果您在 Mac 上运行,您只需在聚光灯下搜索并按回车键即可。

解决方案 8:

对于任何使用 anaconda 的人,你可以安装该certifi软件包,更多信息请参见:

https://anaconda.org/anaconda/certifi

要安装,请在终端中输入以下行:

conda install -c anaconda certifi

解决方案 9:

open /Applications/Python 3.7/Install Certificates.command

在终端中尝试此命令

解决方案 10:

对我来说有两个步骤有用: - 进入 Macintosh HD > 应用程序 > Python3.7 文件夹 - 单击“安装证书.command”

解决方案 11:

我找到了这个解决方案并且运行良好:

cd /Applications/Python 3.7/
./Install Certificates.command

解决方案 12:

我遇到了同样的错误,并通过运行以下程序代码解决了该问题:

# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )


def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    print(" -- pip install --upgrade certifi")
    subprocess.check_call([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi

    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()

解决方案 13:

看一下这篇文章,似乎对于更高版本的 Python,证书未预先安装,这似乎会导致此错误。您应该能够运行以下命令来安装 certifi 包:/Applications/Python 3.6/Install Certificates.command

帖子 1:urllib 和“SSL:CERTIFICATE_VERIFY_FAILED”错误

帖子 2:Airbrake 错误:urlopen 错误 [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书

解决方案 14:

遗憾的是,我没能解决问题。但设法让代码运行起来(顺便说一下,几乎我的所有代码都有这个问题)本地发行者证书问题发生在 python3.7 下,所以我改回 python2.7 QAQ,所有需要更改的内容包括“从 urllib2 导入 urlopen”而不是“从 urllib.request 导入 urlopen”,真伤心……

解决方案 15:

我遇到了一个问题,python 不知何故试图使用一个cert.pem不存在的文件。可以通过运行以下命令来查看:

import ssl
paths = ssl.get_default_verify_paths()

指向openssl_cafile/etc/ssl/cert.pem在该路径下不存在。

设置SSL_CERT_FILE为确实存在的路径解决了问题:

export SSL_CERT_FILE=/etc/pki/tls/cert.pem

解决方案 16:

使用请求库。尝试此解决方案,或者直接https://在 URL 前添加:

import requests
from bs4 import BeautifulSoup
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = requests.get("http://en.wikipedia.org"+pageUrl, verify=False).text
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href']
                print(newPage)
                pages.add(newPage)
                getLinks(newPage)
getLinks("")

检查这是否适合你

解决方案 17:

与 Stack Overflow 上的所有专家相比,我还是个新手。

我正在运行 2 个版本的 jupyter notebook(一个通过全新安装的 Anaconda Navigator,另一个通过 ????)。我认为这是因为 Anaconda 是作为本地安装安装在我的 Mac 上的(根据 Anaconda 说明)。

我已经安装了 python 3.7。之后,我使用终端打开 jupyter notebook,我认为它将另一个版本全局放到了我的 Mac 上。

不过,我不确定,因为我只是通过反复试验来学习!

我执行了终端命令:

conda install -c anaconda certifi 

(按照上面的指示,但没有效果。)

我的python 3.7安装在OS Catalina10.15.3上:

  • /Library/Python/3.7/site-packages 和

  • 〜/库/Python/3.7/lib/python/站点包

证书位于:

  • 〜/库/Python/3.7/lib/python/site-packages/certifi-2019.11.28.dist-info

我试图找到 Install Certification.command ...但通过查看文件结构找不到它...不在应用程序中...也不在上面的链接中。

我最终通过 Spotlight 找到它并安装了它(正如上面有人建议的那样)。它自动双击并在同一个文件夹中安装了另一个证书:

  • 〜/库/Python/3.7/lib/python/站点包/

以上任何方法都没有为我解决任何问题...我仍然遇到相同的错误。

因此,我通过以下方式解决了这个问题:

  1. 关闭我的 jupyter 笔记本。

  2. 打开 Anaconda Navigator。

  3. 通过 Navigator GUI(而不是通过终端)打开 jupyter notebook。

  4. 打开我的笔记本并运行代码。

我无法告诉你为什么这个方法有效。但它帮我解决了问题。

我只是想下次省去别人的麻烦。如果有人能告诉我为什么它有效,那就太好了。

我没有尝试其他终端命令,因为我知道 2 个版本的 jupyter notebook 存在问题。我只是不知道如何解决这个问题。

解决方案 18:

这将起作用。将环境变量 PYTHONHTTPSVERIFY 设置为 0。

  • 通过输入 linux 命令:

export PYTHONHTTPSVERIFY = 0

或者

  • 在python代码中使用:

import os
os.environ["PYTHONHTTPSVERIFY"] = "0"

解决方案 19:

对我来说,问题在于REQUESTS_CA_BUNDLE.bash_profile

/Users/westonagreene/.bash_profile:
...
export REQUESTS_CA_BUNDLE=/usr/local/etc/openssl/cert.pem
...

一旦我将其设置REQUESTS_CA_BUNDLE为空白(即从中删除.bash_profile),requests它就可以再次工作。

export REQUESTS_CA_BUNDLE=""

requests仅当通过 CLI (命令行界面)执行 python 时才会出现此问题。如果我运行requests.get(URL, CERT)它,它就会正常解决。

Mac OS Catalina (10.15.6)。Pyenv 3.6.11。我收到的错误消息:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

我在其他地方的回答:https://stackoverflow.com/a/64151964/4420657

解决方案 20:

我正在使用 Debian 10 buster 并尝试使用 youtube-dl 下载文件并出现此错误:
sudo youtube-dl -k https://youtu.be/uscis0CnDjk

[youtube] uscis0CnDjk:下载网页错误:无法下载网页:<urlopen 错误 [SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)>(由 URLError(SSLCertVerificationError(1, '[SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)'))) 导致

python2 和 python3.8 的证书安装正确,但我一直收到相同的错误。最后(这不是最好的解决方案,但对我而言有效,就是消除证书检查,因为它是 youtube-dl 中的一个选项)使用此命令
sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk

解决方案 21:

我在 Ubuntu 20.04 系统上看到了这个问题,并且没有任何“真正的修复”(比如这个)有帮助。

虽然 Firefox 可以正常打开该网站,但 GNOME Web(即 Epiphany)和 Python3 都不wget接受该证书。经过一番搜索,我在 ServerFault 上看到了这个答案,其中列出了两个常见原因:

  • 该证书实际上是由未知的 CA(例如内部 CA)签名的。

  • 该证书是使用来自某个知名 CA 的中间 CA 证书签名的,并且远程服务器配置错误,因为它没有将该中间 CA 证书作为 CA 链的响应包含进去。

您可以使用Qualys SSL Labs网站检查网站的证书,如果有问题,请联系网站管理员进行修复。

如果您现在确实需要解决这个问题,我建议使用像Rambod这样的临时解决方案,仅限于您尝试访问的网站。

解决方案 22:

顺便说一句,如果您遇到相同的错误,aiohttp只需将verify_ssl=False参数放入TCPConnector

import aiohttp
...

async with aiohttp.ClientSession(
    connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
    async with session.get(url) as response:
        body = await response.text()

解决方案 23:

确保您的 websockets >=10.0

附加到:安装证书.command 更新 Shell 配置文件.command

pip3 安装 websockets==10.0

解决方案 24:

''''

导入 pymongo

从 pymongo.mongo_client 导入 MongoClient

CONNECTION_STRING = "mongodb+srv://用户名:密码@clustername.g3gasa2.mongodb.net /?retryWrites=true&w=majority&ssl_cert_reqs=CERT_NONE"

客户端 = pymongo.MongoClient(CONNECTION_STRING)

''''

在 Windows 中,我尝试将 mongodb 与 jupyter notebook 连接起来,最后通过在 CONNECTION_STRING 中添加&ssl_cert_reqs=CERT_NONE帮助了我。

这基本上禁用了 SSL 证书验证(不推荐用于生产

解决方案 25:

我在 ubuntu 18.04 上的 python 3.7 环境中遇到了这个错误“_ssl.c:1091”。上述任何解决方案都对我不起作用。最后,当我使用 3.11.5 和相关库以及 conda 11.7 创建了一个新环境时,通过反复试验,解决了这个问题。

解决方案 26:

在 Mac-sonoma 操作系统中用 .zprofile 和 .zshenv 设置这些是有效的。

查看以下代码片段的结果后,此方法有效:

import ssl
paths = ssl.get_default_verify_paths()
print(paths)

DefaultVerifyPaths(cafile ='/库/应用程序支持/somefolder/somefolder/download/nscacert.pem',capath ='/库/应用程序支持/somefolder/somefolder/download/',openssl_cafile_env ='SSL_CERT_FILE',openssl_cafile ='/用户/chvr/anaconda3/ssl/cert.pem',openssl_capath_env ='SSL_CERT_DIR',openssl_capath ='/用户/chvr/anaconda3/ssl/certs')

export SSL_CERT_DIR="/Library/Application Support/folder/folder/download/"
export SSL_CERT_FILE="/Library/Application Support/folder/folder/download/nscacert.pem"

在终端中执行这些命令并确保 .zhrc / .zprofile 文件具有这 2 个路径条目。如果没有,请手动添加并重新启动 Python 终端。

解决方案 27:

我在 Windows 上使用 anaconda。一直出现同样的错误,直到我尝试了以下操作;

import urllib.request
link = 'http://docs.python.org'
with urllib.request.urlopen(link) as response:
    htmlSource = response.read()

这是我从有关使用 urlopen 的 stackoverflow 线程中获得的:

Python urllib urlopen 不工作

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用