UnicodeEncodeError: 'ascii' codec can't encode character
Bonsoir,
Voici mon problème :
je débute avec Python (python 2.5.2 final, Ubuntu 8.04, éditeur DrPython 165),
je souhaite récupérer une page d'un site web pour la parser grâce à BeautifulSoup, pour me faire la main j'applique le code-source donné en exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import re
import urllib
page=urllib.urlopen('http://lapageweb.com')
doc=page.read()
soup = BeautifulSoup(''.join(doc))
for p in soup.findAll(['p', 'div']):
soup1 = BeautifulSoup(p.renderContents())
res = ''
for b in soup1.findAll(text=True):
res += b
print res |
A l'exécution, j'obtiens le message suivant :
Code:
1 2 3 4 5
|
Traceback (most recent call last):
File "/home/webtotoche/DevPython/Apprentissage/test.py", line 19, in <module>
print res
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb7' in position 590: ordinal not in range(128) |
Je crois avoir compris qu'on a affaire à un charset ou à un mode d'encodage de fichier mais... je suis incapable d'aller plus loin...
Malgré mes recherches (et notamment ces deux pages http://sebsauvage.net/python/charsets_et_encoding.html et http://python.jpvweb.com/mesrecettespython/encodage, cette dernière prometteuse mais qui s'arrête en chemin :-( ), malgré des tentatives de conversion, je n'ai pas trouvé comment résoudre mon problème.
J'ignore comment :
- déterminer l'encodage utilisé dans la page web que je lis
- déterminer le charset utilisé
- déterminer l'encodage utilisé par ma plateforme (l'instruction print sys.stdout.encoding me réponde None)
- convertir d'un encodage à une autre : si au lieu de faire doc = page.read() je fais doc = page.read().decode('utf_8'), j'obtiens le même message d'erreur - à une variante près : la position, 594 au lieu de 590.
Bref ! Je tourne en rond, j'aimerais en finir une bonne fois pour toutes avec ces questions d'encodage de caractères qui me (nous ? ) pourrissent la vie...
Si vous avez des pistes...
Un grand merci ! :-)