Seite 1 von 1

Beautiful Soup - UnicodeEncodeError

Verfasst: Mittwoch 11. Mai 2011, 11:04
von peterle
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!

Re: Beautiful Soup - UnicodeEncodeError

Verfasst: Mittwoch 11. Mai 2011, 11:33
von peterle
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')

Re: Beautiful Soup - UnicodeEncodeError

Verfasst: Mittwoch 11. Mai 2011, 11:36
von 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.

Re: Beautiful Soup - UnicodeEncodeError

Verfasst: Mittwoch 11. Mai 2011, 11:39
von peterle
super, danke für den Tipp!