Discussion:
faire du jquery en perl...
(trop ancien pour répondre)
luc2
2011-08-23 12:45:11 UTC
Permalink
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.
Paul Gaborit
2011-08-23 15:42:27 UTC
Permalink
À (at) 23 Aug 2011 12:45:11 GMT,
Post by luc2
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() ?
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/>
Jean-Louis Morel
2011-08-23 15:59:09 UTC
Permalink
Post by luc2
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.
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 "$message\n";

__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/
Denis Dordoigne
2011-08-24 05:43:26 UTC
Permalink
Bonjour,
Post by luc2
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"
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
Emmanuel Florac
2011-08-24 06:26:25 UTC
Permalink
Post by Denis Dordoigne
Si l'idée est juste de récupérer le texte entre les balises, le plus
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
Denis Dordoigne
2011-08-24 07:02:06 UTC
Permalink
Post by Emmanuel Florac
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).

TimToadyly,
--
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
Emmanuel Florac
2011-08-24 08:24:18 UTC
Permalink
Post by Denis Dordoigne
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.
Paul Gaborit
2011-08-24 08:56:49 UTC
Permalink
À (at) Wed, 24 Aug 2011 09:02:06 +0200,
Post by Denis Dordoigne
Post by Emmanuel Florac
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/>
Denis Dordoigne
2011-08-24 10:45:01 UTC
Permalink
Bonjour,
Post by Paul Gaborit
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*. »
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.
--
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
Emmanuel Florac
2011-08-24 20:47:52 UTC
Permalink
Post by Denis Dordoigne
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
Xavier
2011-08-25 19:43:06 UTC
Permalink
Post by Emmanuel Florac
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)
Continuer la lecture sur narkive:
Loading...