Почему я не могу получить страницы википедии с помощью LWP :: Simple? - PullRequest
11 голосов
/ 23 августа 2008

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

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

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

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

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

Что здесь может происходить?

Ответы [ 5 ]

18 голосов
/ 24 августа 2008

Видимо Википедия блокирует 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;
12 голосов
/ 16 сентября 2008

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

use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
6 голосов
/ 02 ноября 2012

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

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

5 голосов
/ 16 сентября 2008

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

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

5 голосов
/ 24 августа 2008

Поскольку Википедия блокирует строку агента пользователя HTTP, используемую LWP :: Simple.

Вы получите ответ «403 Forbidden», если попытаетесь его использовать.

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

...