¿Por qué no puedo recuperar páginas de Wikipedia con LWP::Simple?
Pregunta
Estoy intentando recuperar páginas de Wikipedia usando LWP::Simple, pero no van a volver.Este código:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
no imprime nada.Pero si uso alguna otra página web, digamos http://www.google.com
, funciona bien.
¿Hay algún otro nombre que debería usar para referirme a las páginas de Wikipedia?
¿Qué podría estar pasando aquí?
Solución
Aparentemente Wikipedia bloquea LWP::Solicitudes simples: http://www.perlmonks.org/?node_id=695886
En su lugar, funciona lo siguiente:
#!/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;
Otros consejos
También puede simplemente configurar la UA en el módulo LWP::Simple; simplemente importe la variable $ua y le permitirá modificar el UserAgent subyacente:
use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
Resolví este problema usando LWP:RobotUA
en lugar de LWP::UserAgent
.Puedes leer el documento a continuación.No hay muchas diferencias que debas modificar.
Porque Wikipedia está bloqueando la cadena de agente de usuario HTTP utilizada por LWP::Simple.
Obtendrá una respuesta "403 Prohibido" si intenta usarlo.
Pruebe el módulo LWP::UserAgent para solucionar este problema, configurando el atributo del agente.
Consulte también los módulos CPAN relacionados con Mediawiki: están diseñados para acceder a los sitios de Mediawiki (de los cuales Wikipedia es uno) y pueden brindarle más detalles que un simple LWP.