[Python] HTML Parser

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 !

--
PsyKotroP

7 réponses

  1. Modérateur
    Ben... tu ouvre le fichier !

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

    (à condition que le fichier tienne en mémoire).
    2
    1. Modérateur
      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
      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
        1. Modérateur
          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
          1. merci beaucoup ca marche nikel avec l'ouverture de fichier !
            0
            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