Bonsoir,
Voilà j'aimerais savoir comment je pourrais m'y prendre pour récupérer certaines lignes (dont je connais le début et la fin) d'un tableau qui contiendrait le code source d'une page html.
Merci d'avance pour vos réponses,
++
Bonsoir,
Voilà j'aimerais savoir comment je pourrais m'y prendre pour récupérer certaines lignes (dont je connais le début et la fin) d'un tableau qui contiendrait le code source d'une page html.
Merci d'avance pour vos réponses,
++
Bonjour,
Pour réaliser cela en perl il n'y a rien de plus simple,
tu fais un passage sur tous les elements en testant chaque element
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if($tab[i] =~ /debut(.*)fin/)
bye
Bonjour,
Tout d'abord merci pour ta réponse. Finalement j'ai préféré stocker le résultat de ma page source dans un fichier (je ne vois pas comment mettre une page source ligne par ligne).
Cependant je suis bloqué lors du parcours du fichier. Je souhaite mettre des lignes contenu dans la balise <PRE> </PRE> dans un autre fichier, mais le problème c'est que je ne vois pas, dans la pratique, comment lui faire comprendre qu'il doit remplir le fichier que pour les lignes entre les balises <PRE>.
Merci d'avance pour les conseils et l'aide.
++
Je te conseille vivement d'utiliser un parseur HTML. Par exemple HTML::TreeBuilder ou HTML::Parser (au choix selon la taille de ton HTML et surtout tes préférences).
Sinon tu peux bien sûr lire le contenu de ton fichier ou de ta page html dans une variable et récupérer l'information qui t'intéresse avec des expressions régulière.
Mais tu vas rencontrer de nombreux problème, si tu parse à la main. Par exemple si tes tags pre ont des attributs. Utilise plutôt un des parseurs du CPAN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 open my $fh, '<', 'file.html' or die "$!\n"; my $page = do { local $/; <$fh>}; # ou lire la page en ligne avec : # use LWP::Simple; # my $page = get('http://www.yourpage.hmtl'); while ( $page =~ m{<pre>(.*?)</pre>}gs ) { # fais ce que tu veux avec $1, par exemple: print $1; }
Si tu ne comprends pas une partie du code ci-dessus, n'hésite pas à demander
Merci pour la réponse.
En ce qui concerne le parser, je n'ai jamais vraiment cerné qu'est ce que c'était, et donc en quoi cela peut être utile.
J'ai essayé ton code mais rien ne passe, je n'ai même pas de message d'erreurs. Pourrais-tu le détailler stp ?![]()
Merci !
++
Si rien ne se passe, c'est que soit tes tags pre sont en majuscule ;-) soit ils ont des attributs.
Voilà ce que fait le code :
(1) il ouvre un handler sur le fichier et le passe dans une variable $fh
(2) lit tout le contenu du fichier et le passe dans $page (c'est un "slurp"; en modifiant localement la variable de fin d'enregistrement $/ pour lire tout le fichier d'un coup et pas ligne à ligne) (il y avait une faute de frappe à cette ligne je l'ai corrigé : il manquait les <>).
(3) pour chaque match, capture ce qu'il y a entre <pre> </pre>
Comme je te l'ai dit c'est une mauvaise idée de parser à la main.
Il vaut mieux utiliser un parseur. Voilà un exemple.
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 #!/usr/bin/env perl use strict; use warnings; use HTML::TreeBuilder::XPath; open my $fh, '<', 'file.html' or die "$!\n"; my $page = do { local $/; <$fh>}; my $tree= HTML::TreeBuilder::XPath->new; $tree->parse( $page ); my $nodes = $tree->findnodes( '//pre'); while ( my $node = $nodes->shift() ) { print $node->as_text(); }
Partager