La fonction follow_link

Signaler
-
 wobot -
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;

2 réponses

Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933
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
>
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021

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.
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933 > wobot
C'est peut-être un tableau de tableaux.
Essaye ceci :

use Data::Dumper qw(Dumper);

my @url_links =  $mech->links();
print Dumper \@url_links;
>
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021

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?
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933 > wobot
Je ne peux pas te dire. C'est techniquement possible qu'un serveur réagisse différemment lorsque le client qui se connecte ne fournit pas un user agent connu.

C'est aussi possible que les liens que tu vois dans un navigateur normal soient générés par du Javascript lorsque la page est interprétée par le navigateur et que, comme WWW::Mechanize ne gère pas le Javascript, tu ne récupères que ce que le serveur envoie.
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933 >
Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021

Indépendamment des problèmes techniques que tu rencontres, il ne me semble pas que https://www.imdb.com/conditions?ref_=ft_cou permette ce que tu veux faire :

Robots and Screen Scraping: You may not use data mining, robots, screen scraping, or similar data gathering and extraction tools on this site, except with our express written consent as noted below.

et https://developer.imdb.com/

Tu devrais peut-être te tourner sur des sites comme Open Movie Database http://www.omdbapi.com/ qui disposent d'une API et fournissent des contenus contribués sous une licence libre
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 ^^