Почему WWW :: Mechanize получает определенные страницы, но не другие? - PullRequest
3 голосов
/ 11 сентября 2010

Я новичок в Perl / HTML.Я пытаюсь использовать $mech->get($url), чтобы получить что-то из периодической таблицы на http://en.wikipedia.org/wiki/Periodic_table, но оно продолжало возвращать сообщение об ошибке, например:

Ошибка GETing http://en.wikipedia.org/wiki/Periodic_table: Запрещенов строке PeriodicTable.pl 13

Но $mech->get($url) работает нормально, если $url равно http://search.cpan.org/.

Любая помощь будет высоко ценится!* Вот мой код:

#!/usr/bin/perl -w

use strict;
use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder;
my $mech = WWW::Mechanize->new( autocheck => 1 );

$mech = WWW::Mechanize->new();

my $table_url = "http://en.wikipedia.org/wiki/Periodic_table/";

$mech->get( $table_url );

Ответы [ 2 ]

10 голосов
/ 11 сентября 2010

Это потому, что Википедия запрещает доступ к некоторым программам на основе User-Agent, предоставленного по запросу.

Вы можете использовать псевдоним для отображения в качестве «обычного» веб-браузера, установив агент после создания экземпляра и перед get(), например:

$mech->agent( 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8' );

Это сработало для меня с URL в вашем сообщении. Более короткие строки, вероятно, тоже будут работать.

(Думаю, вам также следует удалить косую черту из URL.)

WWW :: Mechanize является подклассом LWP :: UserAgent - дополнительную информацию см. В документации, в том числе о методе agent().

Вы должны ограничить использование этого метода доступа. Википедия явно запрещает доступ некоторым паукам в их файле robots.txt . Пользовательский агент по умолчанию для LWP :: UserAgent (который начинается с libwww) находится в списке.

1 голос
/ 12 сентября 2010

При возникновении подобных проблем вам нужно следить за транзакциями HTTP, чтобы вы могли видеть, что веб-сервер отправляет вам обратно. В этом случае вы увидите, что мех подключается и получает ответ, но Википедия отказывается отвечать вашему боту. Мне нравится HTTP Scoop на Mac.

...