Pourquoi ne puis-je pas récupérer les pages Wikipédia avec LWP::Simple ?
Question
J'essaie de récupérer des pages Wikipédia en utilisant LWP : Simple, mais ils ne reviendront pas.Ce code :
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
n'imprime rien.Mais si j'utilise une autre page Web, disons http://www.google.com
, ça fonctionne bien.
Existe-t-il un autre nom que je devrais utiliser pour faire référence aux pages Wikipédia ?
Que peut-il se passer ici ?
La solution
Apparemment, Wikipédia bloque LWP :: requêtes simples : http://www.perlmonks.org/?node_id=695886
Ce qui suit fonctionne à la place :
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $url = "http://en.wikipedia.org/wiki/Stack_overflow";
my $ua = LWP::UserAgent->new();
my $res = $ua->get($url);
print $res->content;
Autres conseils
Vous pouvez également simplement définir l'UA sur le module LWP::Simple - importez simplement la variable $ua, et cela vous permettra de modifier le UserAgent sous-jacent :
use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
J'ai résolu ce problème en utilisant LWP:RobotUA
au lieu de LWP::UserAgent
.Vous pouvez lire le document ci-dessous.Il n'y a pas beaucoup de différences que vous devriez modifier.
Parce que Wikipédia bloque la chaîne d'agent utilisateur HTTP utilisée par LWP :: Simple.
Vous obtiendrez une réponse "403 Forbidden" si vous essayez de l'utiliser.
Essayez le module LWP::UserAgent pour contourner ce problème, en définissant l'attribut d'agent.
Consultez également les modules CPAN liés à Mediawiki - ils sont conçus pour accéder aux sites Mediawiki (dont wikipedia est l'un) et peuvent vous donner plus de cloches et de sifflets qu'un simple LWP.