Beautiful Soup Codierungs Problem soup -> string

Django, Flask, Bottle, WSGI, CGI…
Antworten
pythoconda
User
Beiträge: 4
Registriert: Dienstag 31. Juli 2018, 12:23

Dienstag 31. Juli 2018, 12:31

Hallo Leute ,
Beim extrahieren einer Website mit Beautiful Soup habe ich folgendes Problem.
Beim umwandeln eines Soup Objektes in einen string werden mir dannach die umlaute mehr richtig angezeigt.
Hier mal ein Beispiel Ausschnitt:" , Sonderanknüpfungen und Ausweichklauseln für besondere Sachverhalte; Neufassung der Art. 38 bis 46 Einführungsgesetz zum Bürgerlichen Gesetzbuch, Ã\x84nderung"

Hat wohl irgendwas mit der Codierung zutun, habe schon viel gegoogelt und versucht aber finde leider keine Lösung und es hapert auch etwas am Verständniss muss ich gestehen.

Kennt jemand eine einfache Lösung?
Sirius3
User
Beiträge: 8608
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 31. Juli 2018, 12:49

Wie sieht denn die Verarbeitung der Webseite bei Dir aus? Zeig bitte den Code, damit wir sehen können, an welcher Stelle das Kodierungsproblem auftritt.
pythoconda
User
Beiträge: 4
Registriert: Dienstag 31. Juli 2018, 12:23

Dienstag 31. Juli 2018, 13:13

Hey Sirius,
Gerne.
url2='http://dipbt.bundestag.de/extrakt/ba/WP ... 37091.html'
resp2 = requests.get(url2, allow_redirects=True)
soup_url2 = BeautifulSoup(resp2.text, 'html.parser')

Im verlauf meines Codes muss ich des öfteren soup Objekte wie z.B soup_url2 in einen string umwandeln.
Nach der umwandlung also z.B

s=str(soup_url2)

werden mir Umlaute nichtmehr richtig angezeigt also z.B so :"Vorschläge des Deutschen Rats für "
vor dem umwandeln also wenn ich das soup Objekt ausgeben lasse funktioniert das ganze aber noch.
Benutzeravatar
__blackjack__
User
Beiträge: 1448
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 31. Juli 2018, 13:49

@pythoconda: Welche Python-Version verwendest Du denn? Und warum musst Du soup-Objekte in Zeichenketten umwandeln?

In Deinem Beispiel ist übrigens zumindest bei Python 2.7 alles korrekt. Man bekommt einen Bytestring in dem der Inhalt im <head> als UTF-8 deklariert ist, und die Daten im <body> passen dazu dann auch von der Kodierung her.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Benutzeravatar
__blackjack__
User
Beiträge: 1448
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 31. Juli 2018, 13:58

Upsi, sorry, die Ausgangsdaten von der Webseite scheinen schon kaputt zu sein.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
pythoconda
User
Beiträge: 4
Registriert: Dienstag 31. Juli 2018, 12:23

Dienstag 31. Juli 2018, 13:59

ich verwende python 3.5.2 und arbeite mit dem jupyter notebook und da tritt leider dieser fehler auf
und mein code ist ziemlich lang sodass ich nicht alles auf python 2.7 umstellen möchte

edit:was meinst du denn mit "kaputt"?

Denn vor der umwandlung also wenn ich das soup Objekt ausgebe werden mir alle Zeichen korrekt angezeigt also alle Umlaute.
Benutzeravatar
__blackjack__
User
Beiträge: 1448
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 31. Juli 2018, 14:15

Nein, auch nicht. Ich sollte keine Fragen bei der Wärme beantworten…

Ob Dir etwas korrekt angezeigt wird, sagt ja noch nicht aus ob's korrekt ist oder nicht. Denn bei Jupyter gehen die Daten ja auch noch mal durch den Webserver und werden irgendwie von Deinem Browser angezeigt/interpretiert.

Nimm mal nicht den `resp2.text` sondern den `resp2.content` zum Parsen.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
pythoconda
User
Beiträge: 4
Registriert: Dienstag 31. Juli 2018, 12:23

Dienstag 31. Juli 2018, 14:20

das hat tatsächlich funktioniert vielen lieben dank !
Antworten