Почему я не могу получить страницы 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, чтобы обойти это, установив атрибут агента.