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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ! :-)