Récupération de données dans un fichier HTML - Perl - Programmation
Marsh Posté le 12-05-2012 à 16:55:59
Ca marche pas parce que les tr contenant les th qui t'intéressent ne sont pas les mêmes que ceux contenant les td qui t'intéressent (mais hiérarchiquement leur frères) et que ton code le suppose (on a un tr constant a chaque tour de boucle du foreach)
On démarre
foreach (@tr) {
my @infos = ();
my $th = $_->look_down("_tag", "th", "class", "left first-cell" ); #ok, trouvé
next unless ($th);
my @content = $th->content_list();
push @infos, $content[0];
my $td = $_->look_down("_tag", "td", "class", "first-cell tl" ); # pas trouve, car c'est pas dans le tr courant
next unless ($td);
tour de boucle d'après
my @infos = ();
my $th = $_->look_down("_tag", "th", "class", "left first-cell" ); #pas trouve, car c'est pas dans le tr courant
next unless ($th);
etc.
Bref, regarde ta hierarchie html et fais tes ordres de recherche de contenu en fonction.
A+,
Marsh Posté le 12-05-2012 à 17:51:13
Merci pour ta réponse Gilou, c'est un peu ce que je pensais, je vais réessayer autrement. Donc en fait le foreach ne convient pas ici sur les tr, par contre il faut quand même que je fasse une boucle pour pouvoir récupérer les contenus de chaque journée. Je vais essayer d'éclaircir ce code HTML(mais j'ai déjà retourner le problème dans tous les sens) et de trouver une autre solution.
Marsh Posté le 12-05-2012 à 19:15:14
Ben déja, formattes correctement ta table, pour y voir plus clair:
<table class="result-table league-results" cellspacing="0" id="resultstable"> |
Après le code est assez simple:
Code :
|
Marsh Posté le 12-05-2012 à 19:51:25
Alors franchement je sais pas comment te remercier gilou ! Ton code est d'une précision diabolique
Je vois que j'étais à des milliers d'années lumières de ce que tu as fais et qd je lis le code ça parait tellement logique.
Il faut vraiment que je fasse des exercices de base en Perl et surtout que j'acquiert la logique de programmation qui pour l'instant me fait grand défaut.
Merci mille fois.
Est-ce que tu connais un bon livre Perl pour débutant et qui traite de tout ce qui est manipulation de textes, fichiers, récup de données ?
Marsh Posté le 12-05-2012 à 20:09:11
Citation : Est-ce que tu connais un bon livre Perl pour débutant |
Hélas, pas vraiment. C'est soit trop compliqué, soit trop simple en général.
Il y a un certain nb de bouquin gratuits ici: http://www.perl.org/books/library.html#beginningperl
Perso, j'ai appris avec entre autres avec un gros pavé intitulé Perl 5 How To qui enseigne par l'exemple (des tonnes de petits programmes utiles, un par tache précise), mais ce bouquin date pas mal maintenant.
A+,
Marsh Posté le 12-05-2012 à 21:09:25
Ok, super ce lien je vais certainement pouvoir trouver des choses intéressantes pour progresser.
Pour Perl 5 How-To je viens de voir qu'il est encore sur Amazon.com, je viens de regarder les commentaires des acheteurs et plusieurs déplorent beaucoup d'erreurs dans les codes, est-ce que tu as remarqué ça quand tu l'utilisais ?
Marsh Posté le 12-05-2012 à 22:29:35
Ce ne sont pas vraiment des erreurs, c'est que le bouquin est vieux et que son code est un poil obsolète (Perl a pas mal évolué depuis).
C'est pas vraiment un bouquin que je conseillerais pour apprendre de nos jours, je le citais juste comme exemple.
En particulier, il y a plein de modules pratiques qui n'existaient pas quand il a été écrit.
Le truc qui me plaisait bien avec ce bouquin c'était l'aspect pratique: pour chaque petit bout de truc que je voulais faire, j'allais voir leurs exemples de base afin d'avoir une idée de comment procéder. C'est vraiment dommage que je ne connaisse pas de bouquin moderne avec la même approche pratique. La plupart des bouquins ont une approche relativement théorique, or pour quelqu'un qui manipule déja d'autres langages de prog, c'est sans grand intérêt.
A+,
Marsh Posté le 12-05-2012 à 22:52:40
Merci à toi, je vais déjà me contenter du lien que tu m'as donné et des ressources web.
A+
Marsh Posté le 13-05-2012 à 09:43:27
Juste deux petites questions Gilou par rapport au code que tu as posté hier pour que je comprenne bien:
Que fait exactement la ligne 20 avec le $td->right; ? Est-ce que ça précise au programme de regarder les balises $td qui se trouve à droite au même niveau hiérarchique?
Et ligne 26 quand le contenu d'un td ne matche pas avec le motif (\d+:\d+), que veut dire push @infos, "-:-"; ?
Merci
Marsh Posté le 13-05-2012 à 11:39:04
Citation : Est-ce que ça précise au programme de regarder les balises $td qui se trouve à droite au même niveau hiérarchique |
Non, ça précise de prendre la balise à droite de la balise $td (laquelle va aussi être une balise de type td) Balise à droite au même niveau, sinon, ça n'a plus guère de sens (il faut considérer la structure arborescente un noeud de l'arbre peut avoir des noeuds frères a droite ou à gauche, un noeud parent, et des noeuds fils).
Citation : Et ligne 26 quand le contenu d'un td ne matche pas avec le motif (\d+:\d+), que veut dire push @infos, "-:-"; ? |
Si je trouve pas de score, comme par exemple 3:2, dans le source, je remplace par un score bidon -:- pour garder une mise en page à peu près cohérente.
A+,
Marsh Posté le 12-05-2012 à 12:32:37
Bonjour,
me revoilà avec un problème que je n'arrive pas résoudre. J'essaie dans le fichier HTML ci-dessous de récupérer les données en gras.
En fait j'aimerais avoir un fichier texte (resfrance1.txt) qui me donnerait le résultat suivant, la journée de championnat, les deux équipes qui se rencontrent, le score et la date.
36. Round
Rennes - Montpellier 0:2 07.05.2012
Auxerre - Bordeaux 2:4 07.05.2012
Lille - Caen 3:0 07.05.2012
Lorient - Dijon 0:0 07.05.2012
St Etienne - Marseille 0:0 07.05.2012
Sochaux - Nancy 1:0 07.05.2012
Toulouse- Nice 0:0 07.05.2012
Valenciennes - Paris SG 3:4 06.05.2012
Evian TG - Ajaccio 2:1 06.05.2012
Lyon - Brest 1:1 06.05.2012
35. Round
Dijon - Auxerre 0:2 03.05.2012
Paris SG - St Etienne 2:0 02.05.2012
......
jusqu'à la 1ère journée(1. Round)
Fichier HTML
Mon code Perl est le suivant et mon problème est que le fichier resfrance1.txt est bien créer mais il est vide. Je me demande si ici le module HTML::TreeBuilder est bien adapté, car il n'y a pas de balise <tr> qui encadre le match, le score et la date, c'est très découpé comme code du coup c'est plus compliqué que je pensais. Merci pour vos réponses éclairées.