Pergunta

Estou tentando buscar páginas da Wikipedia usando LWP::Simples, mas eles não vão voltar.Este código:

#!/usr/bin/perl
use strict;
use LWP::Simple;

print get("http://en.wikipedia.org/wiki/Stack_overflow");

não imprime nada.Mas se eu usar alguma outra página da web, digamos http://www.google.com, Funciona bem.

Existe algum outro nome que eu deveria usar para me referir às páginas da Wikipedia?

O que poderia estar acontecendo aqui?

Foi útil?

Solução

Aparentemente, a Wikipedia bloqueia solicitações LWP::Simple: http://www.perlmonks.org/?node_id=695886

Em vez disso, o seguinte funciona:

#!/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;

Outras dicas

Você também pode simplesmente definir o UA no módulo LWP::Simple - basta importar a variável $ua e isso permitirá que você modifique o UserAgent subjacente:

use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");

Eu resolvi esse problema usando LWP:RobotUA em vez de LWP::UserAgent.Você pode ler o documento abaixo.Não há muitas diferenças que você deva modificar.

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

Porque a Wikipedia está bloqueando a string HTTP do agente do usuário usada por LWP::Simple.

Você receberá uma resposta "403 Forbidden" se tentar usá-lo.

Experimente o módulo LWP::UserAgent para contornar isso, definindo o atributo do agente.

Veja também os módulos CPAN relacionados ao Mediawiki - eles são projetados para acessar sites Mediawiki (dos quais a Wikipedia é um) e podem oferecer mais recursos do que o simples LWP.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top