2016-08-19 2 views
0

erste Frage: ich folgendes Ergebnis erhalten:Python fordert Bibliothek SSL-Fehler: [Errno 2] Datei oder Verzeichnis

File "D:\Anaconda\Lib\site-packages\requests\api.py", line 70, in get return request('get', url, params=params, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\api.py", line 56, in request return session.request(method=method, url=url, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\sessions.py", line 475, in request resp = self.send(prep, **send_kwargs)

File "D:\Anaconda\Lib\site-packages\requests\sessions.py", line 596, in send r = adapter.send(request, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\adapters.py", line 497, in send raise SSLError(e, request=request)

requests.exceptions.SSLError: [Errno 2] No such file or directory

Diese Spuren auf eine Zeile Code zurück hier:

import requests, os, bs4, calendar #, sys 
import urllib.request 

while not year>2016: 
    print('Downloading page {}...'.format(url)) 

    res = requests.get(loginpageURL, verify='false', auth=('username', 'password')) #this is the line that doesn't work 
    res = requests.get(url, verify='false') #but I have tried it without that line and this line also doesn't work 
    res.raise_for_status() 

    soup = bs4.BeautifulSoup(res.text) 
    print(soup) 

Ich habe das Problem ausgiebig untersucht, und komme zu dem Schluss, dass es tatsächlich ein Problem mit den Anfragen/urllib3 Bibliotheken selbst ist.

Zuerst habe ich versucht, die Verify = 'false' Fix here. Es hat nicht funktioniert. Jemand here sagte, neue openSSL und certifi zu installieren, scheinen sie auf meinem System installiert und auf dem neuesten Stand zu sein. Gefunden, der Fehler hat eine große Aufschrift auf here. Keine Lösung von dem, was ich sehen konnte. Es wurde auf github als bekanntes Problem here identifiziert.

Wenn gemäß this Antwort habe ich versucht, überprüfen = ‚false‘ ändern = ‚cacert.pem‘ (was ich im Projektverzeichnis enthalten), um zu überprüfen, warf er diesen Fehler: requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikatsbestätigung fehlgeschlagen (_ssl.c: 645)

Jetzt sitze ich hier und möchte nur diesen einen Codeausschnitt zum Laufen bekommen - ich versuche, ein paar hundert Zip-Dateien aus einem Website - trotz des bekannten Problems mit der Bibliothek. Ich bin relativ neu in Python, aber besonders neu im Web Scraping, also ist dies eine steile Lernkurve für mich. Jede Hilfe wäre willkommen. Muss ich so weit gehen wie scrapping requests?

Danke!

+0

Eigentlich nicht sicher, aber ich denke, ich habe dieses Problem vor einer Weile konfrontiert und festgestellt, dass einige SSL-Module fehlten. Nette Frage übrigens. – FunkySayu

+0

Sie können Recht haben, und das ist, wo mein Wissen zusammenbricht. Ich habe bereits versucht, die Bibliothek MechanicalSoup zu verwenden und es wirft einen ähnlichen Fehler, wenn ich versuche, eine get zu verwenden: requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] Zertifikat überprüfen fehlgeschlagen (_ssl.c: 645) –

Antwort

4
res = requests.get(loginpageURL, verify='false', ... 

Verify verwendet entweder einen booleschen Wert (d. H. Wahr oder Falsch) oder einen Pfad, der dann als Pfad für den Trust Store verwendet wird. Ihre Spezifikation 'false' ist eine Zeichenkette und kein boolescher Wert und sie wird daher versuchen, die Datei false als CA-Speicher zu verwenden. Diese Datei kann nicht gefunden werden und führt daher zu No such file or directory.

Um dies zu beheben, müssen Sie verify=False verwenden, d. H. Den booleschen Wert verwenden.

Abgesehen davon ist das Deaktivieren der Validierung eine schlechte Idee und sollte nur zum Testen durchgeführt werden oder wenn die von TLS gebotene Sicherheit für das Programm völlig irrelevant ist. Für eine Login-Seite wie in Ihrem Fall ist die Deaktivierung der Validierung wahrscheinlich eine schlechte Sache, da ein Mann in der Mitte leicht den Benutzernamen und das Passwort ausspionieren kann.

+0

Danke Steffen, as Sie können oben sehen, ich habe diesen Ansatz geändert, um den Pfad zu cacert.pem anzuzeigen, und es wurde ein 'requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] -Zertifikat fehlgeschlagen (_ssl.c: 645)' Fehler angezeigt. –

+0

@DK .: das ist eine andere Frage dann. Kurz: Entweder befindet sich die Stammzertifizierungsstelle für diese Site nicht in cacert.pem oder der Server liefert kein Kettenzertifikat. Was das für einen Fall ist, kann wohl nur gesagt werden, wenn sowohl die URL als auch der Inhalt von cacert.pem bekannt sind. –

Verwandte Themen