Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\...\spider.py", line 237, in <module>
spider = Spider(url)
File "C:\Python34\lib\site-packages\spider_bib.py", line 84, in __init__
self.__getHTML()
File "C:\Python34\lib\site-packages\spider_bib.py", line 281, in __getHTML
self.__htmlseite = urllib.request.urlopen(self.url).read().decode('utf-8')
File "C:\Python34\lib\urllib\request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "C:\Python34\lib\urllib\request.py", line 455, in open
response = self._open(req, data)
File "C:\Python34\lib\urllib\request.py", line 473, in _open
'_open', req)
File "C:\Python34\lib\urllib\request.py", line 433, in _call_chain
result = func(*args)
File "C:\Python34\lib\urllib\request.py", line 1261, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:\Python34\lib\urllib\request.py", line 1235, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "C:\Python34\lib\http\client.py", line 1066, in request
self._send_request(method, url, body, headers)
File "C:\Python34\lib\http\client.py", line 1094, in _send_request
self.putrequest(method, url, **skips)
File "C:\Python34\lib\http\client.py", line 958, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode character '\xf3' in position 20: ordinal not in range(128)
Ich habe die Kernfunktionen mal herausgelöst, kann dann aber das Problem nicht reproduzieren, d. h. mit einer neuen py-Quellcode-Datei tritt das Problem nicht auf.
Mich irritiert, dass ich oben utf-8 im Quelltext setze und unten etwas von ascii lesen muss. Hat jemand eine Idee, wo ich nach dem Fehler suchen muss? Ich habe jetzt mal an Codierung der URL gedacht (spielt aber beim Versuch den Fehler zu reduzieren keine Rolle), dann an die Codierung der Quelldateien (.py, utf-8) und dann an ein Problem des Moduls.
Der Code ist schon älter und ich müsste da mal eine größere Überarbeitung starten, was auch schon angedacht ist, nur momentan kann ich dem keine Priorität widmen und es ist auch keine Freude, weil das Spaghetti-Code ** 2 ist. Für mich sieht es so aus, als würde alles funktionieren und die Seite abgerufen werden; der Fehler tritt dann erst auf, wenn urllib.request eine Rückgabe an das Hauptprogramm versucht?
PS Der Umstieg auf das request-Modul ist angedacht; neuere Programme nutzen das Modul schon, nur dieses Schätzchen noch nicht.