[Python] HTML Parser

psykotrop Messages postés 4 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 3 mai 2004 - 3 mai 2004 à 12:03
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 -
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
3 mai 2004 à 14:11
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
3 mai 2004 à 15:32
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
3 mai 2004 à 12:10
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 lundi 3 mai 2004 Statut Membre Dernière intervention 3 mai 2004 1
3 mai 2004 à 15:27
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
3 mai 2004 à 18:04
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 lundi 3 mai 2004 Statut Membre Dernière intervention 3 mai 2004 1
3 mai 2004 à 17:27
merci beaucoup ca marche nikel avec l'ouverture de fichier !
0
psykotrop Messages postés 4 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 3 mai 2004 1
3 mai 2004 à 17:34
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

Discussions similaires