2017-09-18 5 views
0

Ich baue ein einfaches Programm, um eine Liste von URLs zu durchlaufen und ihre Inhalte mit schönen Suppe zu extrahieren. Für die Minute versuche ich einfach durch die Liste zu durchlaufen und die HTML abrufen, aber ich bekomme immer folgende Fehlermeldung:SSL: CERTIFICATE_VERIFY_FAILED Fehler unter Windows

Traceback (most recent call last): 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 1318, in do_open 
    encode_chunked=req.has_header('Transfer-encoding')) 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1239, in request 
    self._send_request(method, url, body, headers, encode_chunked) 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1285, in _send_request 
    self.endheaders(body, encode_chunked=encode_chunked) 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1234, in endheaders 
    self._send_output(message_body, encode_chunked=encode_chunked) 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1026, in _send_output 
    self.send(msg) 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 964, in send 
    self.connect() 
    File "C:\ProgramData\Anaconda3\lib\http\client.py", line 1400, in connect 
    server_hostname=server_hostname) 
    File "C:\ProgramData\Anaconda3\lib\ssl.py", line 401, in wrap_socket 
    _context=self, _session=session) 
    File "C:\ProgramData\Anaconda3\lib\ssl.py", line 808, in __init__ 
    self.do_handshake() 
    File "C:\ProgramData\Anaconda3\lib\ssl.py", line 1061, in do_handshake 
    self._sslobj.do_handshake() 
    File "C:\ProgramData\Anaconda3\lib\ssl.py", line 683, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:/Users/thoma/PycharmProjects/fyp/urls_and_prep/parsing_html.py", line 17, in <module> 
    response = urllib.request.urlopen(req) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 223, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 526, in open 
    response = self._open(req, data) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 544, in _open 
    '_open', req) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 504, in _call_chain 
    result = func(*args) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 1361, in https_open 
    context=self._context, check_hostname=self._check_hostname) 
    File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 1320, in do_open 
    raise URLError(err) 
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)> 

Mein Programm ist einfach genug, aber ich kann nicht verstehen, oder keine gute Ressourcen finden um herauszufinden, was genau vor sich geht/wie man damit umgeht. Ich weiß, dass es etwas mit SSL-Zertifikaten zu tun hat, aber ich weiß nicht, wo ich sie verwenden soll oder wo ich sie installieren soll. Ich bin nur ein bisschen verloren, da ich noch nie mit SSL gearbeitet habe . Jede Anleitung oder Hilfe wird sehr geschätzt. Hier ist der Code:

import urllib.request 
from bs4 import BeautifulSoup 

file = open("all_urls.txt", "r") 

for line in file: 
    print(line) 

    try: 
     response = urllib.request.urlopen(line) 
     html = response.read() 
    except ValueError: 
     print(ValueError) 
     continue 
    soup = BeautifulSoup(html, 'lxml') 
    print(soup.get_text()) 
+0

Es gibt [viele Fragen zu diesem Thema] (https://stackoverflow.com/search?q=is%3Aquestion + Python + Zertifikat + fehlgeschlagen). Wenn diese nicht helfen und Sie Hilfe bei Ihrer spezifischen Frage erhalten möchten, geben Sie bitte genügend Details an, um das Problem zu reproduzieren. Dies bedeutet insbesondere die URL, bei der Ihr Code fehlschlägt. –

Antwort

0

Sie Windows oder Linux verwenden? Dieses Problem scheint nicht auf Python, sondern auf Anaconda oder im OS zu liegen. Sie können einige einfache Lösungen ausprobieren: 1 - Führen Sie den scrypt mit einer anderen Python-Installation als der von Anaconda aus. 2 - Verwenden Sie den Virtualenv, um die Komponenten des Betriebssystems zu isolieren.

+0

Ich benutze Windows mit Anaconda, aber ich denke, ich hatte Python und ein paar Bibliotheken installiert, bevor ich Anaconda installiert. Würden Sie Python/Anaconda neu installieren? Danke für die Antwort? –

+0

Die Installation von einzelnen Python und die Python von Anaconda sind an verschiedenen Orten. Versuchen Sie, beim Ausführen des Skripts den vollständigen Pfad von Python zu übergeben. Bsp .: 'C: \ Programme \ Python34 \ Python xxxxxxxx.py' –

0

Unten wird das Problem behoben. Aber sicher sein, nicht in der Produktion zu verwenden, wie es zertifikat ohne Überprüfung die SSL arbeiten wird

import urllib 
from bs4 import BeautifulSoup 
import ssl 

# This is a temporary fix .Be carefule of malicious links 
context = ssl._create_unverified_context() 
file = open("all_urls.txt", "r") 

for line in file: 
    print(line) 

    try: 
     response = urllib.request.urlopen(line, context=context) 
     html = response.read() 
    except ValueError: 
     print(ValueError) 
     continue 
    soup = BeautifulSoup(html, 'lxml') 
    print(soup.get_text()) 
+0

Ok, das ist großartig für jetzt, ich weiß, dass keiner der Links auf meiner Liste bösartig ist, so dass das funktionieren sollte. Ich werde diesen Code jedoch später auf einem Crawler verwenden. Was würden Sie in diesem Szenario dann empfehlen, wenn ich nicht weiß, welche Links ich prüfen werde? Vielen Dank für die Antwort, sehr geschätzt. –

Verwandte Themen