Seite 1 von 1

Problem mit dem encoding

Verfasst: Donnerstag 20. März 2014, 13:10
von Resetpin
Hallo,

ich habe ein Python Skript geschrieben welches mir den Inhalt einer Webseite holt. Dies geschiet wie folgt:

Code: Alles auswählen

page = urllib.urlopen(url).readlines()
for line in page:
    #hier werden die einzelnen Zeilen auf ihren Inhalt untersucht
    #ist der entsprechende Inhalt gefunden werden alle unnützen Teile der Zeile entfert
    #letztlich bleibt eine Liste übrig die einen Link und eine Beschreibung enthält
    #die beiden Teile sollen dann in eine Datei geschrieben werden

    file.write(link[1] + "\t" + link[0] + "\n")
Nun kommt es vor, dass in link[1] also der Beschreibung, Zeichen vorkommen die durch ascii nicht darstellbar sind bei mir wäre das zum Beispiel das Wort
"Électrique Radio"
was mir in link[1] = '\xc9lectrique Radio' angezeigt wird und vom typ str ist

und mir in der Zeile "file.write(link[1] + "\t" + link[0] + "\n")" mit folgendem Fehler angezeigt wird:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc9 in position 0: ordinal not in range(128)

Ich hab mit dem encoding ein bischen rumprobiert, wobei ich sagen muss dass ich damit noch nicht viel zu tun hatte und herausgefunden dass mit folgendem
Konstrukt das gewünschte Ergebis erreicht würde:
u"\xc9lectrique Radio"

Mein Problem ist nur wie komme ich von einem "\xc9lectrique Radio" in ein u"\xc9lectrique Radio"?
Möglicherweise muss ich schon beim auslesen der url das encoding irgendwie anders einstellen?

Für alle Tips und Anregugnen schon jetzt recht herzlichen Dank.

Viele Grüße

Frank

Re: Problem mit dem encoding

Verfasst: Donnerstag 20. März 2014, 13:16
von BlackJack
@Resetpin: Der Kommentar in der Zeile klingt erschreckend. Verwende für das Parsen von HTML eine Bibliothek die dafür gedacht ist. `BeautifulSoup` oder `lxml.html`. Die liefern auch gleich Unicode-Objekte für den Text.

Re: Problem mit dem encoding

Verfasst: Donnerstag 20. März 2014, 13:21
von Resetpin
Hi,

vielen Dank für die schnelle Antwort, die beiden Bibliotheken kannte ich noch nicht, werde mir die gleich mal ansehen.

Danke nochmals

Frank