Question

Avec BeautifulSoup 3.1.0.1 et Python 2.5.2, et en essayant d’analyser une page Web en français. Cependant, dès que j'appelle findAll, j'obtiens le message d'erreur suivant:

UnicodeEncodeError: le codec 'ascii' ne peut pas coder le caractère u '\ xe9' en position 1146: l'ordinal n'est pas dans la plage (128)

Vous trouverez ci-dessous le code que j'utilise actuellement:

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

Quelqu'un a-t-il une idée de pourquoi?

Merci!

UPDATE : le rappel complet est indiqué ci-dessous.

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)
Était-ce utile?

La solution

Voici une autre idée. Votre terminal n'est pas capable d'afficher une chaîne unicode à partir de Python. L'interprète essaie d'abord de le convertir en ASCII. Vous devriez l'encoder explicitement avant l'impression. Je ne connais pas la sémantique exacte de soup.findAll () . Mais c'est probablement quelque chose comme:

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

Si t est vraiment une chaîne. C’est peut-être un autre objet à partir duquel vous devez créer les données que vous souhaitez afficher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top