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 :
A l'exécution, j'obtiens le message suivant :
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
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...
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)
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 ! :-)
Partager