Dans une requete LWP, je recupere ce bout de code HTML (ce n'est pas celui
la, mais c'est architecturé de facon identique)
j'aimerai sortir les infos qui m'interesse mais je coince.
et moi je veux sortir comme resultat :
9.01.08 9:00 bla bla
9.01.08 9:10 ble ble
9.01.08 9:15 bli bli
10.01.08 9:00 bla bla
10.01.08 9:10 ble ble
10.01.08 9:15 bli bli
10.01.08 9h20 blo blo
je sais recuperer chaque jour
ou je sais recuperer chaque heure et texte mais pas y adjoindre la date...
À (at) Tue, 8 Jan 2008 15:16:26 +0100, "Fabrice L." nous disait (told us):
je sais recuperer chaque jour ou je sais recuperer chaque heure et texte mais pas y adjoindre la date...
une idée ?
comme ça, à froid, je suggérerai XML::Twig, mais il n'est pas impossible qu'un autre module existe, plus adapté au HTML...
hope that'll help,
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Fabrice L.
Au final j'aimerai le faire sans module externe, a moins que ce soit la seule solution ! en fait, je lis la page recuperer avec LWP::Simple avec un : while ($page =~ etc....) { $date = $1; $info = $2; } mais ca ne m'avance pas car dans ce cas de figure je ne recupere que la date et la premiere info. Dans une autre requete je peux recuperer toutes les infos ou toutes les dates, mais je n'arrive pas chronologiquement a recuperer : 1. La date 2. les infos 3. les infos 4. une eventuelle autre date 5. les infos 6. une eventuelle autre date 7. les infos 8. les infos 9. les infos
etc... et ce en un seul traitement de la page web recuperée (et meme en plusieurs traitements)
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
mais ca ne vas pas.... une idée, un bout de code, je suis preneur.
merci, Fabrice
"Thomas vO" <vanouden+ a écrit dans le message de news:
bonjour,
À (at) Tue, 8 Jan 2008 15:16:26 +0100, "Fabrice L." nous disait (told us):
je sais recuperer chaque jour ou je sais recuperer chaque heure et texte mais pas y adjoindre la date...
une idée ?
comme ça, à froid, je suggérerai XML::Twig, mais il n'est pas impossible qu'un autre module existe, plus adapté au HTML...
hope that'll help,
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Au final j'aimerai le faire sans module externe, a moins que ce soit la
seule solution !
en fait, je lis la page recuperer avec LWP::Simple avec un : while ($page =~
etc....) { $date = $1; $info = $2; }
mais ca ne m'avance pas car dans ce cas de figure je ne recupere que la date
et la premiere info.
Dans une autre requete je peux recuperer toutes les infos ou toutes les
dates, mais je n'arrive pas chronologiquement a recuperer :
1. La date
2. les infos
3. les infos
4. une eventuelle autre date
5. les infos
6. une eventuelle autre date
7. les infos
8. les infos
9. les infos
etc... et ce en un seul traitement de la page web recuperée (et meme en
plusieurs traitements)
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
Au final j'aimerai le faire sans module externe, a moins que ce soit la seule solution ! en fait, je lis la page recuperer avec LWP::Simple avec un : while ($page =~ etc....) { $date = $1; $info = $2; } mais ca ne m'avance pas car dans ce cas de figure je ne recupere que la date et la premiere info. Dans une autre requete je peux recuperer toutes les infos ou toutes les dates, mais je n'arrive pas chronologiquement a recuperer : 1. La date 2. les infos 3. les infos 4. une eventuelle autre date 5. les infos 6. une eventuelle autre date 7. les infos 8. les infos 9. les infos
etc... et ce en un seul traitement de la page web recuperée (et meme en plusieurs traitements)
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
mais ca ne vas pas.... une idée, un bout de code, je suis preneur.
merci, Fabrice
"Thomas vO" <vanouden+ a écrit dans le message de news:
bonjour,
À (at) Tue, 8 Jan 2008 15:16:26 +0100, "Fabrice L." nous disait (told us):
je sais recuperer chaque jour ou je sais recuperer chaque heure et texte mais pas y adjoindre la date...
une idée ?
comme ça, à froid, je suggérerai XML::Twig, mais il n'est pas impossible qu'un autre module existe, plus adapté au HTML...
hope that'll help,
-- Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Paul Gaborit
À (at) Tue, 8 Jan 2008 17:19:14 +0100, "Fabrice L." écrivait (wrote):
Au final j'aimerai le faire sans module externe, a moins que ce soit la seule solution !
Pour être sûr du résultat, c'est nécessaire. Mais pour traiter une page dont le HTML a une forme bien spécifique et qui ne risque pas de changer, on peut s'en passer....
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
Là, j'ai bêtement mis bout à bout les deux expressions rationnelles initiales en les liant en une alternative (|). On peut évidemment optimiser l'expression rationnelle globale :
while ($page =~ m#<TD( colspan="2"|)>)([^<]+)</TD>#sog) { if ($1 ne '') { $date = $2; } else { $info = $2; print "$date $infon"; } }
(codes pas testés mais l'idée est là...)
PS: même si ça ne gêne pas, le modificateur /o est ici inutile car l'expression rationnelle ne contient pas de variables... De même, le modificateur /s est inutile puisque l'expression rationnelle n'utilise pas de '.'.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 8 Jan 2008 17:19:14 +0100,
"Fabrice L." <infos@serveurs-fr.com> écrivait (wrote):
Au final j'aimerai le faire sans module externe, a moins que ce soit la
seule solution !
Pour être sûr du résultat, c'est nécessaire. Mais pour traiter une
page dont le HTML a une forme bien spécifique et qui ne risque pas de
changer, on peut s'en passer....
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
Là, j'ai bêtement mis bout à bout les deux expressions rationnelles
initiales en les liant en une alternative (|). On peut évidemment
optimiser l'expression rationnelle globale :
while ($page =~
m#<TD( colspan="2"|)>)([^<]+)</TD>#sog) {
if ($1 ne '') {
$date = $2;
} else {
$info = $2;
print "$date $infon";
}
}
(codes pas testés mais l'idée est là...)
PS: même si ça ne gêne pas, le modificateur /o est ici inutile car
l'expression rationnelle ne contient pas de variables... De même, le
modificateur /s est inutile puisque l'expression rationnelle n'utilise
pas de '.'.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 8 Jan 2008 17:19:14 +0100, "Fabrice L." écrivait (wrote):
Au final j'aimerai le faire sans module externe, a moins que ce soit la seule solution !
Pour être sûr du résultat, c'est nécessaire. Mais pour traiter une page dont le HTML a une forme bien spécifique et qui ne risque pas de changer, on peut s'en passer....
Concretement je fais ainsi (en adaptant mon code a l'exemple fourni)
Là, j'ai bêtement mis bout à bout les deux expressions rationnelles initiales en les liant en une alternative (|). On peut évidemment optimiser l'expression rationnelle globale :
while ($page =~ m#<TD( colspan="2"|)>)([^<]+)</TD>#sog) { if ($1 ne '') { $date = $2; } else { $info = $2; print "$date $infon"; } }
(codes pas testés mais l'idée est là...)
PS: même si ça ne gêne pas, le modificateur /o est ici inutile car l'expression rationnelle ne contient pas de variables... De même, le modificateur /s est inutile puisque l'expression rationnelle n'utilise pas de '.'.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Fabrice L.
deja merci ! ce n'est pas la premiere fois que vous m'aidez et a chaque fois, vos lumieres me sont précieuses ! cependant la, ca ne fonctionne pas :
while ($page =~ m#<TD( colspan="2"|)>([^<]+)</TD>#sog) { if ($1 ne '') { $date = $2; } else { $info = $2; print "$date $info<BR>"; } }
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla 9.01.08 9:10 9.01.08 ble ble 9.01.08 9:15 9.01.08 bli bli 10.01.08 9:00 10.01.08 bla bla 10.01.08 9:10 10.01.08 ble ble 10.01.08 9:15 10.01.08 bli bli 10.01.08 9:20 10.01.08 blo blo
alors que l'escompté est : 9.01.08 9:00 bla bla 9.01.08 9:10 ble ble etc....
je nage ! PS le premiere exemple lui ne marche pas du tout mais j'ai compris l'idée, c'est deja la le principal but !
deja merci ! ce n'est pas la premiere fois que vous m'aidez et a chaque
fois, vos lumieres me sont précieuses !
cependant la, ca ne fonctionne pas :
while ($page =~ m#<TD( colspan="2"|)>([^<]+)</TD>#sog) {
if ($1 ne '') { $date = $2; }
else {
$info = $2;
print "$date $info<BR>";
}
}
et le resultat donne :
9.01.08 9:00
9.01.08 bla bla
9.01.08 9:10
9.01.08 ble ble
9.01.08 9:15
9.01.08 bli bli
10.01.08 9:00
10.01.08 bla bla
10.01.08 9:10
10.01.08 ble ble
10.01.08 9:15
10.01.08 bli bli
10.01.08 9:20
10.01.08 blo blo
alors que l'escompté est :
9.01.08 9:00 bla bla
9.01.08 9:10 ble ble
etc....
je nage !
PS le premiere exemple lui ne marche pas du tout mais j'ai compris l'idée,
c'est deja la le principal but !
while ($page =~ m#<TD( colspan="2"|)>([^<]+)</TD>#sog) { if ($1 ne '') { $date = $2; } else { $info = $2; print "$date $info<BR>"; } }
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla 9.01.08 9:10 9.01.08 ble ble 9.01.08 9:15 9.01.08 bli bli 10.01.08 9:00 10.01.08 bla bla 10.01.08 9:10 10.01.08 ble ble 10.01.08 9:15 10.01.08 bli bli 10.01.08 9:20 10.01.08 blo blo
alors que l'escompté est : 9.01.08 9:00 bla bla 9.01.08 9:10 ble ble etc....
je nage ! PS le premiere exemple lui ne marche pas du tout mais j'ai compris l'idée, c'est deja la le principal but !
Paul Gaborit
À (at) Tue, 8 Jan 2008 18:33:44 +0100, "Fabrice L." écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce [...]
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla [...]
C'est parce que mon exemple de code se base sur votre deuxième message pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD. 2- les éléments TD contiennent toujours une info qui vous intéresse. 3- les dates sont toujours sous la forme jj.mm.aa 4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date"; my $heure = "pas d'heure"; while ($page =~ m{<TD.*?>(.+?)</TD>}g) { # on a reconnu un élément TD my $contenu = $1; if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ? $date = $contenu; } elsif ($contenu =~ m{^d+:d+$}) { # ou une heure $heure = $contenu; } else { # ce n'est ni une date ni une heure... print "$date $heure $contenun"; } }
Mais, il est impossible de vérifier que ça marchera à tous les coups sans voir vos données réelles.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 8 Jan 2008 18:33:44 +0100,
"Fabrice L." <infos@serveurs-fr.com> écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce
[...]
et le resultat donne :
9.01.08 9:00
9.01.08 bla bla
[...]
C'est parce que mon exemple de code se base sur votre deuxième message
pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD.
2- les éléments TD contiennent toujours une info qui vous intéresse.
3- les dates sont toujours sous la forme jj.mm.aa
4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date";
my $heure = "pas d'heure";
while ($page =~ m{<TD.*?>(.+?)</TD>}g) {
# on a reconnu un élément TD
my $contenu = $1;
if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ?
$date = $contenu;
} elsif ($contenu =~ m{^d+:d+$}) { # ou une heure
$heure = $contenu;
} else { # ce n'est ni une date ni une heure...
print "$date $heure $contenun";
}
}
Mais, il est impossible de vérifier que ça marchera à tous les coups
sans voir vos données réelles.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 8 Jan 2008 18:33:44 +0100, "Fabrice L." écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce [...]
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla [...]
C'est parce que mon exemple de code se base sur votre deuxième message pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD. 2- les éléments TD contiennent toujours une info qui vous intéresse. 3- les dates sont toujours sous la forme jj.mm.aa 4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date"; my $heure = "pas d'heure"; while ($page =~ m{<TD.*?>(.+?)</TD>}g) { # on a reconnu un élément TD my $contenu = $1; if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ? $date = $contenu; } elsif ($contenu =~ m{^d+:d+$}) { # ou une heure $heure = $contenu; } else { # ce n'est ni une date ni une heure... print "$date $heure $contenun"; } }
Mais, il est impossible de vérifier que ça marchera à tous les coups sans voir vos données réelles.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Fabrice L.
Merci de votre nouvelle réponse,
entre temps (je n'ai vu votre derniere reponse que maintenant : 21h16) j'ai réussi a faire ce que je voulais en me basant sur votre 1ere réponse et en adaptant par rapport aux données réels qui, a posteriori, n'avait guere de rapport avec celles de mon exemple (idiot que je suis !)
Bref, la ligne de conduite que vous m'avez proroposé m'a tout de meme permis d'arriver a mes fins, ce qui, somme toute, est le principal !
Merci bcp, bcp, bcp !
Fabrice
"Paul Gaborit" a écrit dans le message de news:
À (at) Tue, 8 Jan 2008 18:33:44 +0100, "Fabrice L." écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce [...]
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla [...]
C'est parce que mon exemple de code se base sur votre deuxième message pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD. 2- les éléments TD contiennent toujours une info qui vous intéresse. 3- les dates sont toujours sous la forme jj.mm.aa 4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date"; my $heure = "pas d'heure"; while ($page =~ m{<TD.*?>(.+?)</TD>}g) { # on a reconnu un élément TD my $contenu = $1; if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ? $date = $contenu; } elsif ($contenu =~ m{^d+:d+$}) { # ou une heure $heure = $contenu; } else { # ce n'est ni une date ni une heure... print "$date $heure $contenun"; } }
Mais, il est impossible de vérifier que ça marchera à tous les coups sans voir vos données réelles.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Merci de votre nouvelle réponse,
entre temps (je n'ai vu votre derniere reponse que maintenant : 21h16) j'ai
réussi a faire ce que je voulais en me basant sur votre 1ere réponse et en
adaptant par rapport aux données réels qui, a posteriori, n'avait guere de
rapport avec celles de mon exemple (idiot que je suis !)
Bref, la ligne de conduite que vous m'avez proroposé m'a tout de meme permis
d'arriver a mes fins, ce qui, somme toute, est le principal !
Merci bcp, bcp, bcp !
Fabrice
"Paul Gaborit" <Paul.Gaborit@invalid.invalid> a écrit dans le message de
news: wt91w8rrhhg.fsf@marceau.enstimac.fr...
À (at) Tue, 8 Jan 2008 18:33:44 +0100,
"Fabrice L." <infos@serveurs-fr.com> écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce
[...]
et le resultat donne :
9.01.08 9:00
9.01.08 bla bla
[...]
C'est parce que mon exemple de code se base sur votre deuxième message
pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD.
2- les éléments TD contiennent toujours une info qui vous intéresse.
3- les dates sont toujours sous la forme jj.mm.aa
4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date";
my $heure = "pas d'heure";
while ($page =~ m{<TD.*?>(.+?)</TD>}g) {
# on a reconnu un élément TD
my $contenu = $1;
if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ?
$date = $contenu;
} elsif ($contenu =~ m{^d+:d+$}) { # ou une heure
$heure = $contenu;
} else { # ce n'est ni une date ni une heure...
print "$date $heure $contenun";
}
}
Mais, il est impossible de vérifier que ça marchera à tous les coups
sans voir vos données réelles.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
entre temps (je n'ai vu votre derniere reponse que maintenant : 21h16) j'ai réussi a faire ce que je voulais en me basant sur votre 1ere réponse et en adaptant par rapport aux données réels qui, a posteriori, n'avait guere de rapport avec celles de mon exemple (idiot que je suis !)
Bref, la ligne de conduite que vous m'avez proroposé m'a tout de meme permis d'arriver a mes fins, ce qui, somme toute, est le principal !
Merci bcp, bcp, bcp !
Fabrice
"Paul Gaborit" a écrit dans le message de news:
À (at) Tue, 8 Jan 2008 18:33:44 +0100, "Fabrice L." écrivait (wrote):
cependant la, ca ne fonctionne pas :
J'ai utilisé la 2eme soluce [...]
et le resultat donne : 9.01.08 9:00 9.01.08 bla bla [...]
C'est parce que mon exemple de code se base sur votre deuxième message pour donner l'idée de la méthode...
Voici un code qui marche dans la mesure où :
1- toutes les infos sont uniquement dans les éléments TD. 2- les éléments TD contiennent toujours une info qui vous intéresse. 3- les dates sont toujours sous la forme jj.mm.aa 4- les heures sont toujours sous la forme hh:mm
my $date = "pas de date"; my $heure = "pas d'heure"; while ($page =~ m{<TD.*?>(.+?)</TD>}g) { # on a reconnu un élément TD my $contenu = $1; if ($contenu =~ m/^d+.d+.d+$/) { # est-ce une date ? $date = $contenu; } elsif ($contenu =~ m{^d+:d+$}) { # ou une heure $heure = $contenu; } else { # ce n'est ni une date ni une heure... print "$date $heure $contenun"; } }
Mais, il est impossible de vérifier que ça marchera à tous les coups sans voir vos données réelles.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>