Beautiful Soup - UnicodeEncodeError

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
peterle
User
Beiträge: 3
Registriert: Mittwoch 11. Mai 2011, 10:18

Hallo,

ich probiere eine Seite (http://www.gifte.de/Lebensmittel/e_100_-_149.htm) mittels Beautiful Soup zu parsen bekomme aber leider immer einen Unicode Fehler dieser Art:

Code: Alles auswählen

Traceback (most recent call last):
  File "parser.py", line 11, in <module>
    print r
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 1207: ordinal not in range(128)
bisher mein Entwurf:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup
import urllib2

f = urllib2.urlopen("http://www.gifte.de/Lebensmittel/e_100_-_149.htm").read()
soup = BeautifulSoup(f, fromEncoding="windows-1252")
r = soup.findAll("table")

print r
Kann mir bitte jemand helfen und mir schreiben wie ich das am besten löse?
Danke!
peterle
User
Beiträge: 3
Registriert: Mittwoch 11. Mai 2011, 10:18

Ich glaube ich kann mir die Frage selber beantworten, wenn jemand Verbesserungen hat dann bitte her damit :)
Wenn ich BeautifulSoup richtig verstanden habe dann wird jeder string ("windows-1252") in unicode verwandelt und um unicode darstellen zu können im Terminal z.B., muss man den vorher wieder encodieren. Zumindest wenn Ziel- und Ursprungs-Codierung anders sind?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup
import urllib2

f = urllib2.urlopen("http://www.gifte.de/Lebensmittel/e_100_-_149.htm").read()
soup = BeautifulSoup(f, fromEncoding="windows-1252")
for r in soup.findAll("table"):
    print r.encode('utf-8')
BlackJack

@peterle: Nicht das Ergebnis von `findAll()` ausgeben. `BeautifulSoup` hat da in irgendeiner `__repr__()`-Methode einen Fehler wo versucht wird Unicode ohne Kodierungsangabe in eine Zeichenkette umzuwandeln.

Eventuell könntest Du auch auf `lxml.html` umsteigen. `BeautifulSoup` wird AFAIK nicht mehr aktiv entwickelt. Einziger Vorteil ist, dass es nur ein Modul in reinem Python ist.
peterle
User
Beiträge: 3
Registriert: Mittwoch 11. Mai 2011, 10:18

super, danke für den Tipp!
Antworten