Parser HTML Python problème UTF-8

Le problème exposé dans ce sujet a été résolu.

Bonjour, je ne suis absolument pas en train de faire du web mais bon c'est du python et du html ^^

Je suis en train de faire un parser pour extraire du texte d'un fichier html en utilisant la classe HTMLParser. Sauf que quand je lance j'obtient cette erreur :

1
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 

Que dois-je faire ? De ce que j'ai compris c'est un problème d'encodage mais je ne sais pas si c'est le fichier python ou le fichier html. Le texte est en français donc avec des accents et 'ç'

Merci d'avance :)

Bon, j'ai une nouvelle question D:

Grâce à Victor Hugo je découvre les joies d'encodage foireux. Comme hier je souhaite convertir un fichier en UTF-8 pour le lire en python après sauf que notre cher Hugo a eut la bonne idée de mettre des caractères spéciaux : œ

Bien entendu je n'arrive pas à convertir et j'ai beaucoup de mal à trouver comment faire (malgré une bonne 1/2 h de recherche en anglais). Voici le lien du fichier en question.

Encore merci d'avance ! :)

Je veux pouvoir utiliser le fichier html pour ne récupérer que le texte. Quand je le fais avec python3, python me dit qu'il ne peut pas lire le fichier parce qu'il y a un caractère non UTF-8. Du coup je voudrais transformer mon fichier en UTF-8. Sauf qu'à cause de l'E dans l'O, ça ne fonctionne pas.

Je ne connais pas l'encodage du fichier

Du coup je voudrais transformer mon fichier en UTF-8. Sauf qu'à cause de l'E dans l'O, ça ne fonctionne pas.

Je ne connais pas l'encodage du fichier

Ces deux phrases sont contradictoires: tu ne peux pas convertir ton fichier en utf8 tant que tu ne connais pas l'encodage de départ.


Si tu ouvre ton fichier html, il y a cette ligne dans le head (les bons parsers html sont capables de l'exploiter tout seuls) :

1
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">

J'ai aussi testé chardet, mais il se plante :

1
2
yoch@pc1:~/Bureau$ chardetect LES\ CONTEMPLATIONS.html 
LES CONTEMPLATIONS.html: ISO-8859-2 with confidence 0.783891786184

Pour le parser j'utilise celui de python3 donc je suppose qu'il peut être catégorisé de "bon".

Pour les autres fichiers que j'ai récupéré de ce site, faire la conversion avec le ISO-8859 (il me semble) a parfaitement fonctionné.

Du coup si je comprend bien, il faut que j'utilise le format windows-1252 plutôt qu ele ISO ?

Je suis une quiche totale dans toutes ces choses et en plus c'est pas ma tasse de thé ^^.

Pour le parser j'utilise celui de python3 donc je suppose qu'il peut être catégorisé de "bon".

Non, il est simple et fait ce qu'on lui demande, mais pas spécialement évolué. Tu peux essayer lxml.html, voire Beautiful Soup.

Pour les autres fichiers que j'ai récupéré de ce site, faire la conversion avec le ISO-8859 (il me semble) a parfaitement fonctionné.

Connais pas, il y a différentes versions distinctes de ISO-8859.
Et puis, le fait qu'un encodage ne produise pas d'erreur ne prouve absolument pas que le décodage est correct.

Du coup si je comprend bien, il faut que j'utilise le format windows-1252 plutôt qu ele ISO ?

C'est selon si toutes les pages emploient le même encodage ou non. C'est aussi pour ça que la détection automatique est très pratique.


Un exemple d'utilisation avec lxml :

1
2
3
4
5
6
7
>>> import lxml.html
>>> doc = lxml.html.parse("http://www.ebooksgratuits.com/html/hugo_contemplations.html")
>>> doc.docinfo.encoding
'windows-1252'
>>> text = ''.join(doc.xpath('//text()'))
>>> 'œ' in text
True
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte