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

Web Perl Discussion :

Extraction du text dans un fichier html


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut Extraction du text dans un fichier html
    Bonjour,
    J'ai en entrée un fichier html et je cherche à recuperer uniquement l'information textuel de ce fichier :

    <td class="avistxt" width="290">Alors pour moi qui bricole .... ou pour ouvrir un dossier.</td>
    et j'aimerais recuperer uniquement : " Alors pour moi qui bricole ....blabla... ou pour ouvrir un dossier.

    C'est à titre d'exemple biensur

    j'ai réutiliser le code exposé dans un ancien post, ce qui me donne :

    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
    #!/usr/bin/perl
    use strict; 
    use warnings;
     
    use HTML::Parser;
     
    my $page = "Z:\essai.html";
     
    # création de mon parser
    my $parser = HTML:Parser->new();
     
    # définition des mes evenements
    $parser->handler( text => \&text, "text" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end => \&end, "tagname" );
     
    $parser->parse($page);
     
    {
    my $in_span_textegras;
    my @data;
     
    sub start {
    my ($tag, $attr) = @_;
    $in_span_textegras++
    if $tag eq 'td' and $attr->{class} eq 'avistxt';
    }
     
    sub end {
    my ($tag) = @_;
    $in_span_textegras--
    if $tag eq 'td' and $in_span_textegras;
    }
     
    sub text {
    my ($text) = @_;
    push @data, $text
    if $in_span_textegras;
    }
     
    }
    Comme vous vous en doutez, je n'ai pas ou presque pas de connaissance dans le language PERL
    Est ce que vous y voyez des erreurs ? est ce que à la place de "dtext" dois je mettre mes mots à rechercher sachant que le contenu textuel change à chaque page ? (désolé si je dis des bétises :s)
    Est ce que le faite que je sois sous windows pose un souci sur l'utilisation de PERL ?
    tant de réponse qui me sont encore inconnu pour une simple débutante que je suis :p

    merci à ceux qui répondront

  2. #2
    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
    Ben ça m'a l'air très bien tout ça (d'ailleurs je pense que c'est l'un de mes codes vu l'usage de closures).

    Pour afficher ce texte, on va juste rajouter une fonction à l'intérieur du bloc du parser :
    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
    #!/usr/bin/perl
    use strict; 
    use warnings;
     
    use HTML::Parser;
     
    my $page = "Z:/essai.html";
     
    # création de mon parser
    my $parser = HTML:Parser->new();
     
    # définition des mes evenements
    $parser->handler( text => \&text, "dtext" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end => \&end, "tagname" );
     
    $parser->parse($page);
     
    print get_data();
     
    {
      my $in;
      my @data;
     
      sub start {
        my ($tag, $attr) = @_;
        $in++ if $tag eq 'td' and $attr->{class} eq 'avistxt';
      }
     
      sub end {
        my ($tag) = @_;
        $in-- if $tag eq 'td' and $in;
      }
     
      sub text {
        my ($text) = @_;
        push @data, $text if $in;
      }
     
      get_data {
        return @data;
      }
    }
    Est ce que le faite que je sois sous windows pose un souci sur l'utilisation de PERL ?
    Pas du tout, installe juste ActivePerl (c'est gratuit, et tu n'es pas obligé de donner tes informations).

    --
    Jedaï

  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
    C'est parce que tous tes td n'ont pas une classe :

    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
    #!/usr/bin/perl
    use strict; 
    use warnings;
     
    use HTML::Parser;
     
    my $page = "essai.html";
     
    # création de mon parser
    my $parser = HTML:Parser->new();
     
    # définition des mes evenements
    $parser->handler( text => \&text, "dtext" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end => \&end, "tagname" );
     
    $parser->parse($page);
     
    print get_data();
     
    {
      my $in;
      my @data;
     
      sub start {
        my ($tag, $attr) = @_;
        $in++ 
          if $tag eq 'td' 
    	and exists $attr->{$class} 
    	  and $attr->{class} eq 'avistxt';
      }
     
      sub end {
        my ($tag) = @_;
        $in-- if $tag eq 'td' and $in;
      }
     
      sub text {
        my ($text) = @_;
        push @data, $text if $in;
      }
     
      get_data {
        return @data;
      }
    }
    --
    Jedaï

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    moaurf un grand merci !!
    Je me disais bien que c'etait pas grand chose

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    erf c'etait de courte durée :p
    maintenant j'ai mon fichier.pl qui marche impeccable, je me suis intéressé à la création de mon .exe

    donc voila les manips que j'ai faite :
    ppm install PAR
    pp -o test2.exe test2.pl

    Compress::Zlib object version 1.22 does not match
    oader/0x8b1100/DynaLoader.pm line 225.
    Compilation failed in require at /loader/0x8b1100/
    BEGIN failed--compilation aborted at /loader/0x8b1
    Compilation failed in require at par.pl line 252.
    :s une petite idée ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    [up] hé ! oui Week end fini, on se remet au boulot
    donc est ce que quelqu'un à deja eu une erreur similaire ?

  7. #7
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour,

    Si tu commençais par nous dire ce qui ne marche pas correctement dans ton code ?

    A première vue, tu as un problème à la première ligne après les use : my $page = "Z:\essai.html";
    Utilise des ' et non pas des ", sinon perl va croire que comme e est précédé d'un antislash, il s'agit d'un caractère spécial, or ce n'est pas le cas.

    Sinon, pas de problème entre Perl et Windows, ils s'entendent très bien

    €dit : Jedai, tu es vraiment trop rapide

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    Merci à tous pour ces réponses rapides, je me remet dedans et je vous tiens au courant de l'avancement
    [edit] oui jedai s'est bien un de tes codes

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    A première vue, tu as un problème à la première ligne après les use : my $page = "Z:\essai.html";
    Utilise des ' et non pas des ", sinon perl va croire que comme e est précédé d'un antislash, il s'agit d'un caractère spécial, or ce n'est pas le cas.
    J'ai finalement opté pour un accés directe à internet :) donc j'ai plus le problème :)

    Hum, après pas mal de test :s, j'arrive à extraire mon texte mais j'ai toujours plien d'erreurs lors de l'excution ... si quelqu'un à une idée, je pense que ca doit vraiment être rien :s

    à chaque test, voila ce qui en sort :

    Use of uninitialized value in string eq at test2.pl line 31.
    Use of uninitialized value in string eq at test2.pl line 31.
    Use of uninitialized value in string eq at test2.pl line 31.
    etc..
    voici le code :

    #!/usr/bin/perl
    use strict;
    use warnings;

    use LWP::Simple;
    use HTML::Parser;
    use HTML::Form;

    my $page = get( "http://toluna.fr/gradignan_est_parfait-av-919318.html");

    # création de mon parser
    my $parser = HTML::Parser->new();

    # définition des mes evenements
    $parser->handler( text => \&text, "text" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end => \&end, "tagname" );

    $parser->parse($page);

    print &get_data();

    $parser->eof;
    {
    my $in;
    my @data;

    sub start {
    my ($tag,$attr) = @_;

    $in++ if ($tag eq 'td' and $attr->{class} eq 'avistxt');
    }

    sub end {
    my ($tag) = @_;
    $in-- if ($tag eq 'td' and $in='1');
    }

    sub text {
    my ($text) = @_;
    push @data, $text if ($in );
    }

    sub get_data {
    #print "in : ".$in;
    return @data;
    }

    }
    exit;

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/04/2008, 15h27
  2. Réponses: 4
    Dernier message: 05/02/2008, 11h08
  3. Extraction de texte dans une page HTML
    Par ninox_ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h29
  4. Extraction de texte dans un fichier
    Par chris91 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2006, 16h09
  5. Extraction de données dans un fichier texte en VB6 !
    Par rockroa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/06/2006, 16h00

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