UnicodeEncodeError с BeautifulSoup 3.1.0.1 и Python 2.5.2 - PullRequest
4 голосов
/ 21 января 2009

С BeautifulSoup 3.1.0.1 и Python 2.5.2 и попыткой разобрать веб-страницу на французском языке. Однако, как только я вызываю findAll, я получаю следующую ошибку:

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xe9' в позиции 1146: порядковый номер не в диапазоне (128)

Ниже приведен код, который я сейчас использую:

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://fr.encarta.msn.com/encyclopedia_761561798/Paris.html")
soup = BeautifulSoup(page, fromEncoding="latin1")
r = soup.findAll("table")
print r

У кого-нибудь есть идея, почему?

Спасибо!

ОБНОВЛЕНИЕ : По запросу, ниже приведена полная трассировка

Traceback (most recent call last):
  File "[...]\test.py", line 6, in <module>
    print r
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1146-1147: ordinal not in range(128)

1 Ответ

11 голосов
/ 21 января 2009

Вот еще одна идея. Ваш терминал не способен отображать строку Unicode из Python. Интерпретатор пытается сначала преобразовать его в ASCII. Вы должны явно закодировать его перед печатью. Я не знаю точную семантику soup.findAll(). Но это, вероятно, что-то вроде:

for t in  soup.findAll("table"):
    print t.encode('latin1')

Если t действительно строка. Может быть, это просто еще один объект, из которого вы должны построить данные, которые вы хотите отобразить.

...