La fonction follow_link

Fermé
wobot - Modifié le 2 juin 2020 à 21:30
 wobot - 7 juin 2020 à 04:49
Bonjour,


Cela concerne la fonction follow_link: J'essaye d'utiliser une deuxième fois la fonction sur une page que j'avais déjà "follow" avec cette même fonction donc. J'ai utilisé d'abord la méthode avec get mais ça a pas marché donc j'ai tenté celle proposée par le site metacpan (voir pièce jointe) mais l'invite répond "link not found at projet.pl line 22" et pourtant, le lien est bien présent dans le code source de la page.

Quelqu'un pourrait m'aider? Merci d'avance.


use LWP::Simple;
use PerlIO::locale;
use HTML::TreeBuilder;
use WWW::Mechanize;
binmode STDOUT, ':locale';
use strict;
use warnings;

print "Entrez le nom du premier acteur: ";
my $acteur1 = <STDIN>;
print "Entrez le nom du premier acteur: ";
my $acteur2 = <STDIN>;
print "Nous allons comparer la filmographie de $acteur1 et $acteur2";

my $lien1 = "https://www.imdb.com/find?s=nm&q=$acteur1";
my $mech = WWW::Mechanize->new();
$mech->get($lien1);
$mech->follow_link( url_regex => qr/nm0/i );
$mech->follow_link( url_regex => qr/act_/i );
print $mech->content;
A voir également:

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
3 juin 2020 à 15:25
Salut wobot,

Il y a 20 lignes dans ce que tu as posté, pas 22, alors on ne sait pas à quelle ligne le message d'erreur se réfère.

En supposant qu'il s'agisse de la 2ème ligne d'appel à
follow_link()
, ce message signifie qu'aucune URL dans un lien de la page que tu as récupéré ne correspond à ton critère de recherche correspondant "act_".

Vérifie les liens présents sur la page récupérée après le premier appel à
follow_link()
avec la méthode
links()
(récupère les dans un tableau et affiche son contenu).

Tu devrais aussi lire https://www.imdb.com/conditions?ref_=ft_cou pour t'assurer que ce tu fais est conforme aux conditions d'utilisation de ce site.

Dal
0
Bonjour,
c'est bizarre, l'invite me répond "WWW::Link=ARRAY(0x43b5628) quand j'utilise la méthode links(). Ca signifie quoi?

Merci d'avance
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > wobot
Modifié le 3 juin 2020 à 17:04
tu as récupéré un tableau, il faut affecter le retour de la méthode
links()
à un tableau que tu déclares dans ton script Perl puis itérer dans les éléments du tableau (par exemple avec
foreach
) pour les afficher ou l'afficher autrement, par exemple avec le module Data::Dumper (qui est un Core module, standard dans Perl)

https://perlmaven.com/perl-arrays

Par exemple :

my @url_links =  $mech->links();
foreach my $url (@url_links) {
  print "url = $url\n";
}
0
wobot > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
3 juin 2020 à 21:21
Ah, mais j'ai fait exactement ça. La même réponse: "url = WWW::Mechanize::Link=ARRAY(0x43b5628)"

Comme tu dis, je crois qu'IMDB bloque le truc.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > wobot
4 juin 2020 à 09:09
C'est peut-être un tableau de tableaux.
Essaye ceci :

use Data::Dumper qw(Dumper);

my @url_links =  $mech->links();
print Dumper \@url_links;
0
wobot > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
4 juin 2020 à 21:18
Ca marche, merci!
Par contre, ça reprend des liens inutiles (genre ceux en bas de page) mais pas les liens de la filmographie de l'acteur.
C'est caché volontairement par le site tu crois?
0
Merci beaucoup, j'ai trouvé la solution!
J'ai posté un nouveau sujet car j'ai un autre problème sur le même code.
Ce serait cool que tu checkes si t'as le temps ^^
0