Почему я не могу получить страницы Wikipedia с LWP:: Simple?

Я пытаюсь извлечь страницы Википедии, используя LWP:: Simple, но они не возвращаются. Этот код:

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

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

ничего не печатает. Но если я использую другую веб-страницу, скажем http://www.google.com, она работает нормально.

Есть ли другое имя, которое я должен использовать, чтобы ссылаться на страницы Википедии?

Что здесь можно сделать?

Ответ 1

По-видимому, блоки Википедии LWP:: Простые запросы: http://www.perlmonks.org/?node_id=695886

Вместо этого выполняется следующее:

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

Ответ 2

Вы также можете просто установить UA на LWP:: Simple module - просто импортировать переменную $ua, и она позволит вам изменить базовый UserAgent:

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

Ответ 3

Я решил эту проблему, используя LWP:RobotUA вместо LWP::UserAgent. Вы можете прочитать документ ниже. Существует не так много различий, которые вы должны изменить.

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

Ответ 4

Также см. модули CPAN, связанные с Mediawiki, - они предназначены для попадания на сайты Mediawiki (из которых википедия одна) и могут дать вам больше колоколов и свистков, чем простой LWP.

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

Ответ 5

Поскольку Wikipedia блокирует строку user-agent HTTP, используемую LWP:: Simple.

Вы получите сообщение "403 Forbidden", если вы попытаетесь его использовать.

Попробуйте модуль LWP:: UserAgent, чтобы обойти это, установив атрибут агента.