Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

faire du jquery en perl...

8 réponses
Avatar
luc2
ha ha, j'vous ai bien eu ! non, je ne cherche pas a faire du jquery en perl !

bonjour, vous allez bien ? il fait pas trop chaud chez vous ? tant mieux !

voici ma question :

my $document_html = '<html><head></head><body><div class="content">bonjour</div>
</body></html>';
my $message = get_html( '.content', $document_html );
print "$message\n"; # j'aimerais que ca affiche "bonjour"

n'y aurait-il pas une librairie pour me permettre d'avoir une fonction comme ce
get_html() ? ou pour recuperer le contenu de cette balise sans trop me fatiguer
? il y a une tonne de facons de faire, mais je voudrais privilegier le fait de
faire le moins d'effort possible, et le fait de le faire proprement.

8 réponses

Avatar
Paul Gaborit
À (at) 23 Aug 2011 12:45:11 GMT,
luc2 écrivait (wrote):

voici ma question :

my $document_html = '<html><head></head><body><div class="content">bonjour</div>
</body></html>';
my $message = get_html( '.content', $document_html );
print "$messagen"; # j'aimerais que ca affiche "bonjour"

n'y aurait-il pas une librairie pour me permettre d'avoir une fonction
comme ce get_html() ?



Un parser HTML fera l'affaire : HTML::Parser ou XML::Twig, par exemple...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Jean-Louis Morel
Le 23/08/2011 14:45, luc2 a écrit :

voici ma question :

my $document_html = '<html><head></head><body><div class="content">bonjour</div>
</body></html>';
my $message = get_html( '.content', $document_html );
print "$messagen"; # j'aimerais que ca affiche "bonjour"

n'y aurait-il pas une librairie pour me permettre d'avoir une fonction comme ce
get_html() ? ou pour recuperer le contenu de cette balise sans trop me fatiguer
? il y a une tonne de facons de faire, mais je voudrais privilegier le fait de
faire le moins d'effort possible, et le fait de le faire proprement.



On peut utiliser HTML::TokeParser par exemple:

#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser;

my $document_html = '<html><head></head><body>
<div class="content">bonjour</div></body></html>';

sub get_html {
my ($class, $html) = @_;
my $p = HTML::TokeParser->new($html);
if (my $tag = $p->get_tag('div')) {
if ($tag->[1]->{class} eq $class) {
return $p->get_text;
}
}
}

my $message = get_html( 'content', $document_html );
print "$messagen";

__END__

C'est juste un exemple à adapter. On prend la première balise <div>
et on suppose qu'elle à l'attribut 'class' défini... etc
HTH

--
J-L
http://www.bribes.org/perl/
Avatar
Denis Dordoigne
Bonjour,

my $document_html = '<html><head></head><body><div class="content">bonjour</div>
</body></html>';
my $message = get_html( '.content', $document_html );
print "$messagen"; # j'aimerais que ca affiche "bonjour"



Si l'idée est juste de récupérer le texte entre les balises, le plus simple est d'utiliser une bête expression rationnelle du type :
my ($message) = $document_html =~ />([^s<>]+)</;

--
Denis Dordoigne
Membre de l'April - promouvoir et défendre le logiciel libre - april.org
Rejoignez maintenant plus de 5 000 personnes, associations,
entreprises et collectivités qui soutiennent notre action
Avatar
Emmanuel Florac
Le Wed, 24 Aug 2011 07:43:26 +0200, Denis Dordoigne a écrit:


Si l'idée est juste de récupérer le texte entre les balises, le plus
simple est d'utiliser une bête expression rationnelle du type :
my ($message) = $document_html =~ />([^s<>]+)</;



Sans jamais oublier qu'on ne peut pas analyser un langage à balises
correctement avec des regexps, n'est ce pas? n'est ce pas?

Voir la "légendaire" première réponse :

<http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-
xhtml-self-contained-tags>

--
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore, all
progress depends on the unreasonable man.
George Bernard Shaw
Avatar
Emmanuel Florac
Le Wed, 24 Aug 2011 09:02:06 +0200, Denis Dordoigne a écrit:

La regexp dans mon message était donnée dans un contexte (ligne
d'introduction commençant par un "si" au-dessus), qui excluait
totalement l'analyse des balises (il s'agit justement d'exclure les
balises de l'analyse).



Oui mais l'OP parle apparemment de récupérer le contenu d'un div précis,
auquel cas il ne peut pas couper à une analyse du HTML correcte s'il veut
un résultat fiable.

--
"Dope will get you through times of no money better
than money will get you through times of no dope."
Freewheelin' Franklin.
Avatar
Paul Gaborit
À (at) Wed, 24 Aug 2011 09:02:06 +0200,
Denis Dordoigne écrivait (wrote):

Sans jamais oublier qu'on ne peut pas analyser un langage à balises
correctement avec des regexps, n'est ce pas? n'est ce pas?


Sans jamais oublier qu'on doit faire attention avant de balancer un dogme dans
une discussion, surtout en programmation où les dogmes sont souvent idiots sortis
de leurs contextes (je pense également qu'ils sont généralement idiots dans
leur contexte, cf. TMTOWTDI dans perlglossary, mais ce n'est pas le sujet ici).
La regexp dans mon message était donnée dans un contexte (ligne d'introduction
commençant par un "si" au-dessus), qui excluait totalement l'analyse des balises
(il s'agit justement d'exclure les balises de l'analyse).



Nos réponses n'avaient rien de dogmatiques. Elle répondait à la demande
ainsi formulée : « il y a une tonne de facons de faire, mais je voudrais
privilegier le fait de faire le moins d'effort possible, et le fait de
le faire *proprement*. »

Il n'y a pas moyen de faire *proprement* avec une simple regexp (et ce
n'est pas dogmatique) !

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
Emmanuel Florac
Le Wed, 24 Aug 2011 12:45:01 +0200, Denis Dordoigne a écrit:


Je ne remets pas en cause le fait d'utiliser un parser pour lire du
html, personnellement c'est même la solution que je privilégierais, je
répondais juste au dogme balancé hors de propos en réponse à mon
message.




Quand on propose à quelqu'un qu'on ne connaît pas (a priori peut-être un
débutant) de parser un document structuré avec des regexps, à mon avis il
faut l'accompagner du warning qui va avec. C'est tout.

Maintenant, cool, on est sur Usenet, on aime perl, décontracte, Joe.

--
I contend that we are both atheists. I just believe in one fewer god
than you do. When you understand why you dismiss all the other
possible gods, you will understand why I dismiss yours.
Steven Roberts
Avatar
xavier
Emmanuel Florac wrote:

Quand on propose à quelqu'un qu'on ne connaît pas



Personne ne connaît luc2 ? Mouahaaahouuuaa !

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)