我正在练习使用Python'进行Web Scraping的代码,并且我一直有这个证书问题:
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(我在网上尝试了各种解决方案,但都没有用......真的很令人沮丧)
答案 0 :(得分:49)
从前,我偶然发现了这个问题。如果您使用的是macOS,请转至Macintosh HD>应用程序> Python3.6文件夹(或您使用的任何版本的python)>双击“ Install Certificates.command”文件。 :D
答案 1 :(得分:38)
要使用未经验证的ssl,您可以将其添加到代码中:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
答案 2 :(得分:7)
要解决此问题:
您需要做的就是安装Python证书! macOS上的常见问题。
打开这些文件:
Install Certificates.command
Update Shell Profile.command
只需运行这两个脚本,您将不再有此问题。
希望这会有所帮助!
答案 3 :(得分:6)
此终端命令:
open /Applications/Python\ 3.7/Install\ Certificates.command
在这里找到: https://stackoverflow.com/a/57614113/6207266
为我解决了。 使用我的配置
pip install --upgrade certifi
没有影响。
答案 4 :(得分:5)
对于新手用户,您可以进入Applications文件夹并展开Python 3.7文件夹。现在,首先运行(或双击)Install Certificates.command,然后运行Update Shell Profile.command
答案 5 :(得分:3)
我可以找到此解决方案,并且运行良好:
cd /Applications/Python\ 3.7/
./Install\ Certificates.command
答案 6 :(得分:2)
看一下这篇文章,似乎对于更高版本的Python,未预安装证书,这似乎会导致此错误。您应该能够运行以下命令来安装certifi软件包:/Applications/Python\ 3.6/Install\ Certificates.command
答案 7 :(得分:2)
如果您在Mac上运行,则只需在聚光灯下搜索Install Certificates.command
并按Enter键即可。
答案 8 :(得分:1)
open /Applications/Python\ 3.7/Install\ Certificates.command
在终端试试这个命令
答案 9 :(得分:1)
将您的网址从"http://en.wikipedia.org"
更改为"https://en.wikipedia.org"
。
答案 10 :(得分:1)
我遇到了同样的错误并通过运行下面的程序代码解决了问题:
# 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()
答案 11 :(得分:1)
对于使用anaconda的任何人,您都需要安装certifi
软件包,请参见:
https://anaconda.org/anaconda/certifi
要安装,请在终端中输入以下行:
conda install -c anaconda certifi
答案 12 :(得分:1)
两个步骤对我有用: -进入Macintosh HD>应用程序> Python3.7文件夹 -点击“安装Certificates.command”
答案 13 :(得分:1)
答案 14 :(得分:0)
使用请求库。
尝试此解决方案,或仅在URL之前添加https://
:
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("")
检查是否适合您
答案 15 :(得分:0)
与Stack Overflow的所有专家相比,我是一个相对新手。
我有2个版本的jupyter笔记本正在运行(一个通过全新的Anaconda Navigator安装,一个通过????)。我认为这是因为Anaconda是作为Mac上的本地安装安装的(按照Anaconda的说明)。
我已经安装了python 3.7。之后,我使用终端打开jupyter笔记本,我认为这会在Mac上全局发布另一个版本。
但是,我不确定,因为我只是通过反复试验来学习!
我执行了终端命令:
conda install -c anaconda certifi
(如上所述),但没有用。
我的python 3.7安装在操作系统Catalina10.15.3中:
证书位于:
我试图找到Install Certificate.command ...,但是通过查看文件结构却找不到它...不在Applications中...不在上面的链接中。
我最终通过在Spotlight中找到它进行了安装(如上文所述)。它自动双击并在与以下文件夹相同的文件夹中安装了另一个证书:
以上都不为我解决任何问题...我仍然遇到相同的错误。
所以,我通过以下方法解决了这个问题:
我不能告诉你为什么这样做。但这为我解决了这个问题。
下一次我只想节省某人的麻烦。如果有人能告诉我它为什么起作用,那将是非常棒的。
我没有尝试其他终端命令,因为我知道有两个版本的jupyter notebook。我只是不知道该如何解决。
答案 16 :(得分:0)
对我来说,问题是我在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=""
该问题仅在通过CLI(命令行界面)执行python requests
时出现。如果我运行requests.get(URL, CERT)
,就可以解决。
Mac OS Catalina(10.15.6)。
3.6.11的Pyenv。
我收到的错误消息:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
答案 17 :(得分:0)
我正在使用Debian 10 buster,并尝试使用youtube-dl下载文件并出现以下错误:
sudo youtube-dl -k https://youtu.be/uscis0CnDjk
[youtube] uscis0CnDjk:正在下载网页 错误:无法下载网页:
(由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
答案 18 :(得分:0)
我在 Ubuntu 20.04 系统上看到了这个问题,但“真正的修复”(如 this one)都没有帮助。
虽然 Firefox 愿意打开该站点,但 GNOME Web(即 Epiphany)、Python3 或 wget
都不接受该证书。经过一番搜索,我发现 this answer on ServerFault 列出了两个常见的原因:
您可以使用 Qualys SSL Labs 网站检查网站的证书,如果有问题,请联系网站管理员进行修复。
如果您确实需要立即解决此问题,我建议您使用一个临时解决方案,例如 Rambod's,仅限于您尝试访问的网站。< /p>
答案 19 :(得分:-1)
在Mac上安装Certificates.command。
答案 20 :(得分:-1)
这将起作用。将环境变量PYTHONHTTPSVERIFY设置为0。
export PYTHONHTTPSVERIFY = 0
OR
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"