2008-08-23 2 views
10

Я пытаюсь извлечь страницы Википедии, используя 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, она отлично работает.

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

Что может быть здесь?

+0

Обратите внимание, что вы получаете ошибку «403 Forbidden». – Bryce 2013-08-13 17:21:35

ответ

18

Видимо Википедия блоки LWP :: Simple запросы: 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; 
+0

Я получаю ошибку ** 500 Не удается подключиться к en.wikipedia.org:443** для данного URL-адреса вики, однако для домашней страницы stackoverflow http://stackoverflow.com, она дает 403. Я добавил `$ ua-> agent (" WikiBot/0.1 ");` перед вызовом метода `get`, это работало классно для многих сайтов, включая stackoverflow. Но он все еще дает ошибку на странице wiki, такую ​​же ошибку, как упоминалось выше. – 2016-04-18 07:12:40

4

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

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

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

5

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

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

12

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

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

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

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

Смежные вопросы