Soucis avec les accents et urlopen()

Résolu
Hakunamatatáaa Messages postés 13 Statut Membre -  
Hakunamatatáaa Messages postés 13 Statut Membre -
Bonjour à tous,

Je ne connais pas très bien le python nous dirons que je suis en train de l'apprendre par moi-même mais je rencontre un petit problème et je ne trouve pas vraiment la solution : / ça dois avoir avec le type d'encondage mais je sèche un peu là : /

exemple :


from urllib import *
page = urlopen("https://previmeteo.com/fr/2988507-meteo-paris.html")
content = page.read()


mon problème est qu'il ne récupère pas les accents quand je fais un
print content


Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.

3 réponses

nidhogg-59 Messages postés 107 Statut Membre 28
 
Bonjour,
si j'ai bien compris ton problème, tu peux utiliser la bibliothèque HTMLParser pour transformer les HTMLEntities comme "& egrave;" en "è":
from HTMLParser import HTMLParser
# ton code ici
text = HTMLParser().unescape (content)
print text



Bonne journée!
0
Hakunamatatáaa Messages postés 13 Statut Membre
 
Merci pour ta réponse nidhogg :) hélas j'obtiens une erreur :(

File "/home/pi/meteo.py", line 7, in meteo
text = HTMLParser().unescape (content)
File "/usr/lib/python2.7/HTMLParser.py", line 472, in unescape
return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
File "/usr/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 233: ordinal not in range(128)

Je ne sais pas si je me suis bien exprimé mais en gros quand je print content voila un exemple de ce que ça m'affiche :

<title>M▒t▒o gratuite Waterloo - Pr▒visions ▒ 7 jours pour ......

et évidement je voudrais avoir les "é" "è" au lieu de ces "▒" que je ne sait même pas a quoi ça correspond c'est peut être juste le symbole quand y ne sait pas.
Bien à vous,
Hakunamatatáaa.
0
Hakunamatatáaa Messages postés 13 Statut Membre
 
Bon finalement j'ai trouvé sur ce site http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/

Si vous lisez une page HTML, l’encoding est souvent déclaré dans la balise META ou dans un header.

Et une fois que vous l’avez, il faut décoder le texte reçu.

La manière la plus simple de faire cela est :

votre_chaine = votre_chaine.decode('nom_du_codec')

et ça fonctionne niquel :)
0