Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exploitation d'un fichier html - conversion en csv

Sujet résolu
    1 août 2014 à 15:11:35

    Bonjour,

    J'ai à ma disposition plusieurs fichiers html (ou htm) ayant la même structure ressemblant à des tableaux de données. Je sais exploiter les données sous Excel fichier par fichier mais je souhaiterais automatiser le traitement et si il y a plusieurs fichiers rassembler le tout dans un seul fichier au format csv ou dbf peu importe.

    Après de multiples recherches sur le Web et de nombreux tests je suis bloqué :colere:! J'ai bien trouvé le module HTMLParser mais je n'y comprends rein !! Alors si quelqu'un à la gentillesse de m'aider ... merci d'avance

    Bonne journée

    Frédéric

    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2014 à 15:38:03

      erreur de post

      -
      Edité par Asyncore 2 août 2014 à 14:18:43

      • Partager sur Facebook
      • Partager sur Twitter
      Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
        1 août 2014 à 16:57:24

        Peut tu publier ton essai de code ou code plus ou moins achevé ? As tu lu la doc officielle de python ?

        Je suis en train d'essayer de comprendre la doc, je t en dis plus dès que j'ai fini .

        Ce module défini la 'class' HTMLParser qui sert basiquement à formatter des fichiers textes au format HTML et XHTML.

        Code Python:

        class html.parser.HTMLParser(strict = False, *, convert_charrefs = False)

        Crée une instance de parsage.

        Si ‘convert_charrefs’ vaut True (par défault, False), tous les caractères référencés (exceptés ceux dans les balises <script> et <style>) sont automatiquement convertis au caractère correspondant dans le format Unicode. L’utilisation de ‘convert_charrefs = True’ est encouragée and sera bientôt par défault pour Python 3.5.

        Si ‘strict’ vaut False (par défault), le parsage acceptera et parsera les balises invalides. Si ‘strict’ vaut True, le parsage lèvera une exception plutôt quand il n’est pas en mesure d’analyser les balises. L’utilisation de ‘strict = True’ n’est pas encouragée car l’argument ‘strict’ est obsolète.

        Ce parser ne vérifie pas que les balises fermantes correspondent aux balises ouvrantes ni n’appel le gestionnaire de balise de fin qui sont fermés implicement par la fermeture d’un élément externe.

        Les exceptions sont définis ainsi :

        Code Python :

        exception html.parser.HTMLParseError

        Une exception est levée par la classe HTMLParser quand elle rencontre une erreur lors de l’analyse et quand ‘stric’ vaut True. Cette exception prévoit 3 attributs : msg qui est un bref message expliquant l’erreur, lineno qui indique le numéro de ligne où l’erreur de construction s’est produite, et offset qui est le nombre de caractères dans la ligne à laquelle la construction commence.

        Exemple d’application utilisant HTML Parser

        Un exemple basique, au-dessous, est un exemple simple de l’utilisation de HTML Parser qui utilise la classe HTMLParser pour afficher les balises de démarrage, celles de fin et les données qu’elles rencontrent :

        from html.parser import HTMLParser

        class MyHTMLParser(HTMLParser):

        def handle_starttag(self, tag, attrs):

        print("Encountered a start tag:", tag)

        def handle_endtag(self, tag):

        print("Encountered an end tag :", tag)

        def handle_data(self, data):

        print("Encountered some data:", data)

        parser = MyHTMLParser()

        parser.feed('<html><head><title>Test</title></head>'

        '<body><h1>Parse me!</h1></body></html>')

        Ce qui donne :

        Encountered a start tag: html
        Encountered a start tag: head
        Encountered a start tag: title
        Encountered some data: Test
        Encountered an end tag : title
        Encountered an end tag : head
        Encountered a start tag: body
        Encountered a start tag: h1
        Encountered some data: Parse me!
        Encountered an end tag : h1
        Encountered an end tag : body
        Encountered an end tag : html

        -
        Edité par Asyncore 2 août 2014 à 14:18:07

        • Partager sur Facebook
        • Partager sur Twitter
        Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
          2 août 2014 à 14:19:06

          Peut tu nous donner ton code amélioré ?

          Merci, Asyncore

          • Partager sur Facebook
          • Partager sur Twitter
          Python c'est aussi cool qu'une voiture mutlifonctions. - Allez jeter un oeil !
            5 août 2014 à 14:53:39

            Bonjour,

            Merci Asyncore pour ton aide. J'étais parti d'un bout de code ('html2csv - version 2002-09-20 - http://sebsauvage.net') qui fonctionnait pour une première partie de mon fichier html. N'arrivant pas à comprendre le script et suite à tes indications je suis reparti de la base. J'ai ainsi diagnostiqué le problème venant du fichier html le saut de page n'était pas géré !!

            J'ai donc pu ensuite adapté le script initial de la façon suivante :

                  #recuperation des donnees du fichier html
                    data = htmlfile.readlines()
                    nb=0
                    #pour chaque ligne
                    for line in data :
                        nb+=1
                        #print "ligne : " , str(nb)
                        if line[0:49] == """<P style="page-break-after:always" ; font-size:1>""" :
                             #print" ERREUR - SAUT de PAGE, ligne html : ", str(nb)
                             pass
                        else :
                            try :
                                parser.feed(line)
                                txt= parser.getCSV()                   
                                csvfile.write(txt)
                            except:
                                print "CSV = ERREUR : "
                                #csvfile.write("Erreur" )
                                print line + "\n"            
                                continue
                            
                    csvfile.close()
                    print('%d lignes ecrites.\n' % parser.rowCount)
                    htmlfile.close()



            Ca fonctionne bien.

            @+

            frédéric

            • Partager sur Facebook
            • Partager sur Twitter

            Exploitation d'un fichier html - conversion en csv

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown