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

Modules Perl Discussion :

Problème Console avec HTML::Parser


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Par défaut Problème Console avec HTML::Parser
    Bonjour à tous,

    je viens de réaliser un programme en utilisant le module HTML :: PARSER...

    Cependant en l'exécutant, RIEN n'apparaît sur l'écran !! (dans ma console)

    Voici mon code;
    Pouvez vous me dire ce qu'il ne va pas...MERCI

    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
    #!/usr/bin/perl -w
    use strict;
    use diagnostics;
     
    use LWP::Simple;     # on a dit qu'on commençait simple
        use HTML::Parser;    # mais ça se complique ;-)
        use HTML::Form;
     
        # récupère la page web correspondant au critère de recherche
        my $content = get( "http://www.apt-get.org/search.php?query=" . shift);
     
        # crée un nouvel analyseur
        my $p = HTML::Parser->new();
     
        # éléments de l'automate
        my $status = '';    # l'état courant de l'automate
        my $this;           # le dépôt en cours d'analyse
        my %data = ();      # la structure de données complète
     
        # définit les gestionnaires d'événements
        $p->handler( text  => \&text,  "text" );
        $p->handler( start => \&start, "tagname,attr" );
        $p->handler( end   => \&end,   "tagname" );
        $p->unbroken_text( 1 );
     
     
     
     sub start {
            my ( $tag, $args ) = @_;
     
            if ( $tag eq 'li' ) {
                # début d'un nouveau dépôt
                if ( $args->{class} eq 'verifiedsite' ) {
                    $this   = {};      # nouvelle structure vide
                    $status = 'NEW';
                }
                # début d'une liste de paquetages
                elsif ( $args->{class} eq 'packagelist' ) {
                    $this->{pkg} = [];
                    $status = 'PKG';
                }
            }
     
            # les entrées du sources.list
            elsif ( $tag eq 'span' ) {
                if ( $args->{class} eq 'url' ) {
                    $status = 'URL';
                    push @{ $this->{deb} }, "";
                }
            }
     
            # ici, on ajoute l'entrée en cours de création
            # dans la structure $data, avec la clé entryXXX
            elsif ( $tag eq 'a' ) {
                if ( $status eq 'NEW' ) {
                     $data{ $args->{name} } = $this if( $args->{name} );
                }
            }
     
            # séparateurs texte du formulaire
            elsif ( $tag eq 'br/' ) {
                if ( $status eq 'URL' ) {
                    push @{ $this->{deb} }, "";
                }
                elsif ( $status eq 'PKG' ) {
                    push @{ $this->{pkg} }, "";
                }
            }
        }
     
        sub end {
            my $tag = shift;
     
            # fin des urls
            $status = 'NEW' if $tag eq 'span' and $status eq 'URL';
     
            # fin de la liste de paquetages
            $status = 'NEW' if $tag eq 'li'   and $status eq 'PKG';
        }
     
        sub text {
            my $text = shift;
     
            # supprime les sauts lignes
            $text =~ y/\012\015//d;
     
            # texte du sources.list
            $this->{deb}[-1] .= $text if $status eq 'URL';
     
            # liste des paquetages (ignore la première ligne)
            if ( $status eq 'PKG' ) {
                $this->{pkg}[-1] = $text unless $text eq 'Matches:';
            }
        }
     
        for ( keys %data ) {
            print "# $_\n" for grep { $_ } @{ $data{$_}{pkg} };
            print "$_\n"   for grep { $_ } @{ $data{$_}{deb} };
            print "\n";
        }
     
     
      # analyse le document
        $p->parse($content);
        $p->eof;

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Déplace déjà ta boucle for après le parsage du document. (je n'ai pas regardé le code de plus près)

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par stansoad0108 Voir le message
    Cependant en l'exécutant, RIEN n'apparaît sur l'écran !! (dans ma console)
    Je ne sais pas si le reste est correct, mais de toute façon, tu ne risques pas de voir grand chose : tu affiches %data avant de le remplir (de parser le document)...

    --
    Jedaï

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Par défaut
    Merci pour cette remarque !!!

    Malheureusement même en effectuant le déplacement de la boucle "for" avant de parser le document, Rien n'est inscrit sur ma console...

    Pour être honnête, j'ai trouvé plusieurs bouts de code à droite à gauche, et des exemples du module HTML :: Parser, pour n'en écrire qu'un seul...Je voulais le tester, et le modifier pour un autre exemple.

    Merci pour vos autres commentaires.

Discussions similaires

  1. extraction de données avec HTML::Parser
    Par jaljal dans le forum Web
    Réponses: 0
    Dernier message: 24/12/2010, 16h23
  2. Besoin d'un coup de main avec HTML::Parser
    Par mobscene dans le forum Modules
    Réponses: 1
    Dernier message: 09/12/2006, 15h49
  3. Problème applet avec HTML intégré
    Par NewBie_of_rostand dans le forum JBuilder
    Réponses: 4
    Dernier message: 15/03/2006, 11h48
  4. Problème avec le parser XML
    Par sheura dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/11/2005, 18h26
  5. [html+css] problème menu avec liens display:block
    Par Cypselos dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/08/2005, 09h39

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