Ich übe den Code aus 'Web Scraping with Python' und habe weiterhin das folgende Zertifikatsproblem:
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("")
Der Fehler ist:
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)>
Übrigens übte ich auch Scrapy, bekam aber immer wieder das Problem: Befehl nicht gefunden: Scrapy (Ich habe alle möglichen Lösungen online ausprobiert, aber keine funktioniert ... wirklich frustrierend)
python
web-scraping
beautifulsoup
scrapy
ssl-certificate
Catherine4j
quelle
quelle
Antworten:
Es war einmal, als ich über dieses Problem stolperte. Wenn Sie macOS verwenden, gehen Sie zu Macintosh HD> Anwendungen> Python3.6-Ordner (oder zu einer beliebigen Python-Version) und doppelklicken Sie auf die Datei "Install Certificates.command". : D.
quelle
Um nicht verifizierte SSL zu verwenden, können Sie dies Ihrem Code hinzufügen:
import ssl ssl._create_default_https_context = ssl._create_unverified_context
quelle
Um dies zu lösen:
Sie müssen lediglich Python-Zertifikate installieren! Ein häufiges Problem unter macOS.
Öffnen Sie diese Dateien:
Führen Sie einfach diese beiden Skripte aus und Sie werden dieses Problem nicht mehr haben.
Hoffe das hilft!
quelle
Dieser Terminalbefehl:
open /Applications/Python\ 3.7/Install\ Certificates.command
Hier zu finden: https://stackoverflow.com/a/57614113/6207266
Hat es für mich gelöst. Mit meiner Konfiguration
pip install --upgrade certifi
hatte keine Auswirkungen.
quelle
Für Anfänger können Sie im Ordner "Programme" den Ordner "Python 3.7" erweitern. Führen Sie nun zuerst den Befehl Install Certificates.command aus (oder doppelklicken Sie darauf) und aktualisieren Sie dann Shell Profile.command
quelle
Für mich haben zwei Schritte funktioniert: - Gehen Sie zu Macintosh HD> Anwendungen> Python3.7-Ordner - klicken Sie auf "Certificates.command installieren".
quelle
Für alle, die Anaconda verwenden, würden Sie die installieren
certifi
Paket Weitere unter:https://anaconda.org/anaconda/certifi
Geben Sie zur Installation diese Zeile in Ihr Terminal ein:
quelle
Schauen Sie sich diesen Beitrag an. Es scheint, dass für spätere Versionen von Python keine Zertifikate vorinstalliert sind, was diesen Fehler zu verursachen scheint. Sie sollten in der Lage sein, den folgenden Befehl auszuführen, um das certifi-Paket zu installieren:
/Applications/Python\ 3.6/Install\ Certificates.command
Beitrag 1: urllib und "SSL: CERTIFICATE_VERIFY_FAILED" Fehler
Beitrag 2: Airbrake-Fehler: URL-Öffnungsfehler [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikatüberprüfung fehlgeschlagen: Lokales Ausstellerzertifikat kann nicht abgerufen werden
quelle
Ich konnte diese Lösung finden und funktioniert gut:
cd /Applications/Python\ 3.7/ ./Install\ Certificates.command
quelle
Ich habe das Problem leider nicht gelöst. Aber es ist mir gelungen, Codes zum Laufen zu bringen (fast alle meine Codes haben dieses Problem übrigens). Das Problem mit dem lokalen Ausstellerzertifikat tritt unter python3.7 auf. Daher habe ich wieder auf python2.7 QAQ umgestellt und alles, was geändert werden musste, einschließlich "from urllib2 import urlopen". statt "von urllib.request import urlopen" so traurig ...
quelle
Wenn Sie auf einem Mac arbeiten, können Sie einfach
Install Certificates.command
im Scheinwerferlicht suchen und die Eingabetaste drücken.quelle
Verwenden Sie die Anforderungsbibliothek. Probieren Sie diese Lösung aus oder fügen Sie sie einfach
https://
vor der URL hinzu: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("")
Überprüfen Sie, ob dies für Sie funktioniert
quelle
Ich bin ein relativer Neuling im Vergleich zu allen Experten für Stapelüberlauf.
Ich habe 2 Versionen von Jupyter Notebook ausgeführt (eine durch eine neue Anaconda Navigator-Installation und eine durch ????). Ich denke, das liegt daran, dass Anaconda als lokale Installation auf meinem Mac installiert wurde (gemäß den Anweisungen von Anaconda).
Ich hatte bereits Python 3.7 installiert. Danach habe ich mein Terminal verwendet, um das Jupyter-Notebook zu öffnen, und ich denke, dass es eine andere Version global auf meinen Mac gebracht hat.
Ich bin mir jedoch nicht sicher, weil ich nur durch Ausprobieren lerne!
Ich habe den Terminalbefehl ausgeführt:
(wie oben angegeben, aber es hat nicht funktioniert.)
Mein Python 3.7 ist unter OS Catalina10.15.3 installiert in:
Das Zertifikat befindet sich bei:
Ich habe versucht, den Befehl "Install Certificate.command" zu finden, konnte ihn jedoch nicht durch Durchsuchen der Dateistrukturen finden ... nicht in Anwendungen ... nicht in den obigen Links.
Ich habe es schließlich installiert, indem ich es über Spotlight gefunden habe (wie oben vorgeschlagen). Und es doppelklickte automatisch und installierte ein anderes Zertifikat in demselben Ordner wie:
Keiner der oben genannten Punkte hat etwas für mich gelöst ... Ich habe immer noch den gleichen Fehler.
Also löste ich das Problem durch:
Ich kann dir nicht sagen, warum das funktioniert hat. Aber es hat das Problem für mich gelöst.
Ich möchte nur jemandem den Ärger beim nächsten Mal ersparen. Wenn mir jemand sagen kann, warum es funktioniert hat, wäre das großartig.
Ich habe die anderen Terminalbefehle wegen der 2 Versionen des Jupyter-Notebooks, von denen ich wusste, dass sie ein Problem darstellen, nicht ausprobiert. Ich weiß nur nicht, wie ich das beheben soll.
quelle
Für mich war das Problem, dass ich mich
REQUESTS_CA_BUNDLE
in meinem einstellte.bash_profile
Sobald ich
REQUESTS_CA_BUNDLE
auf leer gesetzt (dh entfernt von.bash_profile
),requests
arbeitete wieder.export REQUESTS_CA_BUNDLE=""
Das Problem trat nur auf, wenn Python
requests
über eine CLI (Command Line Interface) ausgeführt wurde. Wenn ich rennerequests.get(URL, CERT)
, löste es sich gut.Mac OS Catalina (10.15.6). Pyenv vom 3.6.11. Fehlermeldung, die ich erhielt:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
Meine Antwort an anderer Stelle: https://stackoverflow.com/a/64151964/4420657
quelle
Ich benutze Debian 10 Buster und versuche eine Datei mit youtube-dl herunterzuladen und erhalte folgende Fehlermeldung:
sudo youtube-dl -k https://youtu.be/uscis0CnDjk
Zertifikate mit python2 und python3.8 sind korrekt installiert, aber ich erhalte dauerhaft den gleichen Fehler. Schließlich (was nicht die beste Lösung ist, aber für mich funktioniert, war es, die Zertifikatprüfung zu eliminieren, wie sie in youtube-dl als Option angegeben ist) mit diesem Befehl
sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk
quelle
Installieren Sie den Befehl Certificates.command auf Ihrem Mac.
quelle
Das wird funktionieren. Setzen Sie die Umgebungsvariable PYTHONHTTPSVERIFY auf 0.
export PYTHONHTTPSVERIFY = 0
ODER
import os os.environ["PYTHONHTTPSVERIFY"] = "0"
quelle