Pregunta

Con BeautifulSoup 3.1.0.1 y Python 2.5.2, y tratando de analizar una página web en francés. Sin embargo, tan pronto como llamo a findAll, aparece el siguiente error:

UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u '\ xe9' en la posición 1146: el ordinal no está en el rango (128)

A continuación se muestra el código que estoy ejecutando actualmente:

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

¿Alguien tiene una idea de por qué?

¡Gracias!

ACTUALIZACIÓN : como se solicitó, a continuación se muestra el rastreo completo

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)
¿Fue útil?

Solución

Aquí hay otra idea. Su terminal no es capaz de mostrar una cadena Unicode de Python. El intérprete intenta convertirlo a ASCII primero. Debe codificarlo explícitamente antes de imprimir. No sé la semántica exacta de soup.findAll () . Pero probablemente sea algo como:

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

Si t realmente es una cadena. Quizás sea solo otro objeto a partir del cual debe construir los datos que desea mostrar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top