IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Parser un fichier HTML


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut Parser un fichier HTML
    Bonjour ,

    J'essaie de parser un fichier HTML , pour y extraire des infos : Problème je ne sais comment m'y prendre car mes connaissances étant limité sur du HTML ,Perl , ....

    Puisque j'apprends également du perl , alors j'ai pensé que les Regex , pourrait m'aider .

    Ce que je veux faire exactement c'est trouver une expression réguliere qui me permet de 'matcher' les lignes d'un tableau , et ensuite pouvoir extraire les infos contenu dans les colonnes .

    Voici un exemple du code HTML (correspondant à une ligne de tabeau)
    (juste préciser que j'ai une cinquantaine de ligne dans ce genre ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <tr>
    <td>1</td>
    <td>
    <a href="#objdef-id3206X4432">mx1.messagelabs.com</a><br>
    </td>
    <td>
    <a href="#objdef-id1856X4432">MX_servers</a><br>
    </td>
    <td>smtp<br>
    </td>
    <td>Accept</td>
    <td><br>
    </td>
    </tr>
    une expression régulière pourrait etre celle ci : le problème c'est qu'elle correspond à plusieurs lignes dans le fichier HTML , alors je cherche une autre solution.. et aussi comment je peux récuperer les données dans les colonnes de cette ligne ?

    [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    use strict;
    use warnings;
     
     
    # Sous-routine permettant d'entrée le fichier en CLI
    sub obtient_ligne{
      #demande , lit , "chompe" et renvoie une ligne d'entrée 
      print $_[0];
      chomp(my $ligne = <STDIN>);
      $ligne ;
    }
     
    my $fichierHTML = &obtient_ligne (" votre fichier HTML ?");
      open IN ,$fichierHTML 
      or die "Impossible d'ouvrir '$fichierHTML ' en entrée : $!";
     
     
     
      while (<>) {
      if (/<tr><td>[0-9]<\/td><td>[a_zA-Z0-9_]<br><\/td><td>[a_zA-Z0-9_]<br><\/td><td><a href=\"#objdef-id3C20EEB5\">[a_zA-Z0-9_]<\/a><br><\/td><td>Accept¦Deny<\/td><td><br><\/td>[a_zA-Z0-9_]<\/tr>/) {
        print ;
      }
    }
    merci ...

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Il existe même directement des parser HTML : http://search.cpan.org/search?query=...arser&mode=all

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    OK ,

    j'ai regardé ...ça m'a pas l'air très simple ...
    connaissez vous ou je peux trouver les tutos en francais ? avec plus d'exemple ?
    j'ai jamais fait du parsing , alors sans exemple je ne vois pas comment je pourrais commencer , surtout que le temps me fait défaut ..

    merci

  5. #5
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par McCrazy Voir le message
    OK ,

    j'ai regardé ...ça m'a pas l'air très simple ...
    connaissez vous ou je peux trouver les tutos en francais ? avec plus d'exemple ?
    j'ai jamais fait du parsing , alors sans exemple je ne vois pas comment je pourrais commencer , surtout que le temps me fait défaut ..

    merci
    tu as ça dans la section tutoriel du site.
    http://djibril.developpez.com/tutoriels/perl/perl-xml/

  6. #6
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    Bonjour ,

    merci pour le tuto..
    j'ai réussi à extraire ce que je voulais grace à HTML::Parser , mais j'ai juste un problème ,

    pour mieux manipuler les données extraites , je voudrais les stocker dans un tableau , mais là ..j'ai essayé de le faire dans la sous routine sub text , mais mon tableau @data , ne me donne rien ... pourquoi ??????

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    #!/usr/bin/perl
     
    use strict;
    use HTML::Parser;
    #package MyParser;
    #use base qw(HTML::Parser);
     
     #my $p = new HTML::Parser;
     #   $p->parse_file("backup.html"); 
     
     
    my $parser = HTML::Parser->new();
    # définition des evenements
    $parser->handler( text  => \&text,  "dtext" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end   => \&end,   "tagname" );
     
    my $count_td;
    my $count_a;
        my @data;
     
        sub start {
            my ($tag, $attr,$attrseq, $origtext) = @_;
           $count_td++;
                if( $tag eq 'td'){
                 #print "ne rien faire \n";
                }
                elsif ($tag eq 'a'and $attr->{href} eq '/[a_zA-Z0-9_]/' ){
                $count_a++
                }
        }
     
     
        sub end {
            my ($tag) = @_;
           $count_td--;
           $count_a--;
                if( $tag eq 'td' and $count_td){
                #print " td \n";
                }
                elsif ($tag eq 'a' and $count_a){
                #print "a \n";
     
                }
        }
     
     
        sub text {
            my ($text) = @_;
            if ($count_td){
            push @data, $text ;
            print " $text  \n";
            }
             elsif ($count_a){
            push (@data, $text);
            print" $text \n";
            }
     
            print @data;
            return @data;
        }
     
    print @data ;
    # package main;
     
    my $html = <<EOHTML;
        #<html>
    <tr>
    <td>1</td>
    <td>
    <a href="#objdef-id3206X4432">mx1.messagelabs.com</a><br>
    </td>
    <td>
    <a href="#objdef-id1856X4432">MX_servers</a><br>
    </td>
    <td>smtp<br>
    </td>
    <td>Accept</td>
    <td><br>
    </td>
    </tr>
    <tr>
    <td>2</td>
    <td>
    <a href="#objdef-id1856X4432">MX_servers</a><br>
    </td>
    <td>Any<br>
    </td>
    <td>smtp<br>
    </td>
    <td>Accept</td>
    <td><br>
    </td>
    </tr>
    <tr>
    <td>3</td>
    <td>
    <a href="#objdef-id1856X4432">MX_servers</a><br>
    </td>
    <td>
    <a href="#objdef-id1854X4432">Domain_controllers</a><br>
    </td>
    <td>
    <a href="#objdef-id4885X4432">Tcp 139</a><br>
    </td>
    <td>Accept</td>
    <td><br>
    </td>
    </tr>
       #</html>
    EOHTML
     
     
    #my $parser = MyParser->new;
     
     
        $parser->parse( $html );

Discussions similaires

  1. parser un fichier HTML avec JAVA
    Par ouinih dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 09/02/2009, 10h33
  2. parser un fichier html: htmlparser
    Par dalila555 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/04/2007, 11h34
  3. parser un fichier html en utilisant java
    Par taouja dans le forum Services Web
    Réponses: 1
    Dernier message: 16/04/2007, 10h12
  4. [C#] Comment lire et parser un fichier html ?
    Par fix105 dans le forum C#
    Réponses: 4
    Dernier message: 28/01/2006, 15h38
  5. parser un fichier html
    Par noarno dans le forum ASP
    Réponses: 2
    Dernier message: 10/12/2003, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo