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í?

¿Fue útil?

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.

http://lwp.interglacial.com/ch12_02.htm

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.

http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top