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 :

Récupération du titre d'une image


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Points : 17
    Points
    17
    Par défaut Récupération du titre d'une image
    Bonjour,
    Voila j'utilise le module HTML::Parser pour extraire les informations de certain site, notament lemonde.fr...
    Mon problème est que sur le site lemonde.fr la 1er lettre de chaque article est une image de la lettre. Il m'est donc impossible de la récupérer avec le module HTML::Parser qui supprime toutes les balises html qu'il croise
    ex :
    http://www.lemonde.fr/web/article/0,...-965349,0.html
    (voir le A)

    J'aimerais pouvoir récuperer cette image ou au moins son titre qui correspond à la lettre que l'image remplace, ce qui me suffirait pour completer l'article que je stock ...
    En d'autre mot, dans l'article : l'image est : A.gif, j'aimerais pouvoir en extraire le A)
    Avez vous une petite idée ?
    j'ai entendu parler de perfectCR qqun l'a deja utilisé ?

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    HTML Parser permet tout à fait de faire ce que tu demandes – et même bien plus, ce n'est pas juste un outil pour enlever les balises .

    Je ne l'utilise pas souvent mais quelque chose comme ça devrait marcher (je lis l'entrée standard)
    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 -w
    use strict;
    use HTML::Parser;
     
    my $parser = HTML::Parser->new( api_version => 3,
                            start_h     => [\&start,"tagname, attr, attr"],
                            );
     
    my @letters;
    sub start {
        my ($tag, $attr) = @_;
        if ($tag =~ /^img$/ and defined $attr->{'src'}) {
            if ($attr->{'src'} =~ m!http://medias.lemonde.fr/mmpub/img/let/!) {
                push @letters, $attr->{'alt'};
            }
        }
    }
     
    while (<>) {
        $parser->parse($_);
    }
    $parser->eof;    
     
    print @letters;
    Rien de bien difficile à comprendre si tu connais le principe des call backs utilisés par HTML Parser. Si tu coinces, dis-le, on t'expliquera.

    PS : Il est vilain, le code du site lemonde.fr

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Oui, ça marche

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    un trés grand merci, je test ca demain matin )

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Pourrais tu me detailler ce que fait : while (<>), j'avoue ne pas comprendre :s,
    quand je teste il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't open http://www.lemonde.fr/web/article/0,1-0@2-823448,36-966120@51-966122, 0.html: No such file or directory at extractionLeMondeM.pl line 102.
    donc apparement il teste l'URL et non pas le contenu, c'est pour ca je cherche à comprendre ta ligne ci-dessus

    Sinon tres jolie utilsation du module HTML:arser, c'est finalement un module que j'utilise à 30% guere plus

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Bonsoir. Désolé, j'ai cru que tu étais plutôt à l'aise avec Perl, donc je ne t'ai montré que l'essentiel. Autant pour moi.

    Dans l'état actuel le script lit l'entrée standard. C'est le sens du while (<>). Celui-ci lit soit les arguments en ligne de commande qu'il interprète comme des fichiers que perl ouvre et dont chaque ligne est lue par le while (<>) et passée dans la variable $_ ; soit, si aucun argument n'est passé en ligne de commande, l'entrée standard (dont chaque ligne là encore est passée à $_).

    Donc tel qu'il est, tu dois lancer le script de test de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ perl testscript.pl lemonde.html     # en supposant que lemonde.html contient ta page
    Tu peux aussi rediriger la sortie de wget avec un tuyau (pipe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ wget -q -O - http://www.lemonde.fr/web/article/0,1-0@2-3236,36-965782@51-965874,0.html | perl testscript.pl  # là c'est un autre article du monde.fr
    Si tu ne veux pas lire à partir d'un fichier, fait comme cela:
    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
    #!/usr/bin/perl -w
    use strict;
    use HTML::Parser;
    use LWP::Simple;
     
    my $url = shift;
    $url = 'http://www.lemonde.fr/web/article/0,1-0@2-3214,36-965235@51-965349,0.html'
        if not defined $url;
     
    my $page = get ($url)
        or die "Could not get $url: $!\n";
     
    my $parser = HTML::Parser->new( api_version => 3,
                            start_h     => [\&start,"tagname, attr, attr"],
                            );
     
    my @letters;
    sub start {
    my ($tag, $attr) = @_;
        if ($tag =~ /^img$/ and defined $attr->{'src'}) {
            if ($attr->{'src'} =~ m!http://medias.lemonde.fr/mmpub/img/let/!) {
                push @letters, $attr->{'alt'};
            }
        }
    }
     
    $parser->parse($page);
    $parser->eof;    
     
    print @letters, "\n";
    Ta question ne portant pas sur la capture de la page mais simplement sur le traitement à partir d'une page déjà capturée, je n'ai pas voulu présupposer dans mon premier exemple, de la manière dont tu avais la page et ai opté pour le passage le plus simple et le plus courant des données en lisant l'entrée standard ou un fichier passé en argument de ligne de commande. L'essentiel ici à mon avis est de comprendre le principe des callbacks et des event handlers. Là tu peux adapter le script à tes besoins (je n'ai pas vérifié que mon critère fonctionne sur toutes les pages).

    Avec <>, là, tu as fait d'une pierre deux coups.

    (Hum, j'espère avoir été clair )

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    impeccable, un grand merci pour ce petit guilde, ca m'a été d'une aide précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Clonezilla Récupération de fichiers dans une image
    Par Invité dans le forum Administration système
    Réponses: 2
    Dernier message: 05/05/2010, 12h38
  2. Titre d'une image mal placé
    Par snacksou dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 12
    Dernier message: 29/10/2009, 15h27
  3. Réponses: 6
    Dernier message: 17/04/2009, 17h48
  4. Récupération du codage d'une image
    Par Cedwik dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/09/2006, 15h59
  5. Récupération du chemin d'une image
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/09/2005, 11h40

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