Beautiful Soup: Fehler beim Schreiben von HTML in eine Datei

Ich experimentiere derzeit ein wenig mit Python und dem Modul Beautiful Soup herum. Ziel ist es, eine ICS Datei in 6 monatigen Abständen automatisiert von einer Webseite herunterzuladen und dann weiter zu verarbeiten. Die Herausforderung dabei ist das mehrfache Absenden von Formularen und die zwischenzeitliche Verarbeitung des Response. Der professionelle Python Entwickler wird wahrscheinlich darüber lachen, aber ich beiße mir an der ein oder anderen Stelle schon die Zähne aus. Aber aus jedem Fehler lernt man und auch die Recherche im Web zeigt, dass nicht alle Profis sind.

Was war das Problem mit Beautiful Soup?

Das Problem war nicht wirklich Beautiful Soup, sondern das Problem saß vor dem Bildschirm. Beim Ausführen meines Codes wurde mir der Fehler: „Exception has occurred: UnicodeEncodeError angezeigt. Im Detail hieß es dann: ‚charmap‘ codec can’t encode characters in position 35882-35888.

UnicodeEncodeError Beautiful Soup

Es ging dabei um den Code Snipsel:

open(„page.html“„w“).write(str(soup))

Anstelle eines sauber formatierten HTML Codes erhielt ich folgende Antwort.

Fehlerhafte Ausgabe

Ich recherchierte ein wenig im Web und wurde auch schnell fündig. In einschlägigen Foren wurde darauf hingewiesen, dass der Rückgabewert von Beautiful Soup noch UTF-8 encodiert werden müsse. Gesagt, getan:

open(„page.html“„w“).write(str(soup.encode(„utf-8“)))

Der Inhalt der Rückgabe veränderte sich, aber leider noch immer habe ich keinen sauber formatierten HTML Code bekommen.

Fehlerhafter Code. Korrigierungswürdig

Kaum macht man es richtig, schon funktioniert es!

Am Ende dann doch die Erleichterung. Eine schöne, ordentliche Ausgabe von dem was ich haben möchte. Für mich als Semi-Amateur eine riesen Erleichterung.

Code: Perfekte Ausgabe

Und wie konnte ich dies erreichen? Ganz einfach! Es war nicht der Rückgabewert von Beautiful Soup der in UTF-8 encodiert werden musste, sondern die Datei in die ich Schreiben möchte musste als UTF-8 encodiert sein.

Dies ist über folgenden Schnipsel möglich:

open(„page.html“„w“encoding=„utf-8“).write(str(soup))

Vielleicht hilft es jemandem, deswegen verewige ich es hier einmal.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.