[Python] HTML Parser

psykotrop Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   -
Salut à tous ! je me met doucement au Python pour créer un parser. En fait pour essayer d'etre clair je souhaiterais récuperer l'ensemble du contenu d'une page html se trouvant entre deux tags spécifiques:

<!-- Premiere nouvelle de section -->
<span class="titreNouvelle">
C'est blalalblalabalbalbalablabalbalbal</span><BR><BR>
<span class="texteNouvelle">
<B>blabla</B>
<br>
<br>blalalblalabalbalbalablabalbalbal
<!-- / Premiere nouvelle de section -->


Ici le tag de début : <!-- Premiere nouvelle de section -->
Tag de fin : <!-- / Premiere nouvelle de section -->

Etant tout débutant qqu accepterait il de me montrer un code qui saurait faire ca ? sachant que j'ai en local le fichier .html contenant l'ensemble et que je souhaite creer un fichier output.html ne contenant que ce qui se présente entre les deux tags précités.

Merci par avance de toute l'aide que vous pourrez m'apporter !

7 réponses

sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 663
 
J'ai donné un exemple pour récupérer tout ce qui se trouve entre 2 tags précis sans utiliser ni expressions régulières ni HTMLParser.

http://www.commentcamarche.net/forum/affich-655749-%5BPython%5D-HTML-parsing#15
2
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 663
 
Ben... tu ouvre le fichier !

file = open("monfichier.dat","rb")
data = file.read()
file.close()

(à condition que le fichier tienne en mémoire).
2
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 663
 
Hello !

Tu as 3 solutions:
- utiliser la simple recherche de chaînes (.find(), etc.)
- utiliser les expressions régulières
- utiliser HTMLParser

Pour les expressions régulières et le HTMLParser, j'ai mis des exemples là:
http://sebsauvage.net/python/snyppets/index.html#getlinks1

Note que la solution avec le .find() peut dans certains cas être beaucoup plus rapide que les 2 autres.

Il y a également un sujet de discussion sur ça ici:
http://www.commentcamarche.net/forum/affich-655749-%5BPython%5D-HTML-parsing
http://www.commentcamarche.net/forum/affich-648645-%5BPython%5D-HTMLParser-Handle_StartTag
http://www.commentcamarche.net/forum/affich-289535-%5BPython%5D-Extractions-de-liens-d%27une-page-web
1
psykotrop Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   1
 
Comment adapter ton dernier exemple :
# Nos données à tester:
data = """aaaa<!-- Begin : Toto -->bbb<!-- End : Toto est OK -->ccc
<!-- Begin : Toto --> Encore un autre ! dddd<!-- End : Toto est OK -->"""

en utilisant un fichier a la place du data= ?

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 663
 
Dans ce cas, tu peux prendre HTMLParser et:
- implémenter handle_data() pour récupérer uniquement le texte entre les balides.
- implémenter handle_starttag() et ajouter seulement un retour à la ligne "\n" quand tu rencontre <br>.

Ainsi, le parseur va automatiquement "nettoyer" ton fichier HTML de toutes les balises.

(Voir les liens que j'ai donné: ils contiennent des exemples de HTMLParser.)
1
psykotrop Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   1
 
merci beaucoup ca marche nikel avec l'ouverture de fichier !
0
psykotrop Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   1
 
Petite autre question. Dans le bout de fichier que je récupere j'ai des tags style </span><BR><BR>
Comment les supprimer du fichier ? histoire d'etre propre.

Il serait bon de faire une analyse ligne par ligne et remplacer par rien non ? mais je ne sais pas comment faire.

Sachant qu'un tag "</span><BR><BR>" sur une ligne n'est pas un tag "<br>" sur une autre ca je veux le conserver :) difficile de s'expliquer je donne un exemple :

texte1</span><BR><BR>
<span class="texte">
<br>chanteur

pour obtenir :
texte1
<br>chanteur

en supprimant par ligne : tous les "<span class="texte">" et "</span><BR><BR>"
0