Использование LWP для получения содержимого веб-страницы - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь использовать LWP :: UserAgent для сбора содержимого веб-страницы, но по какой-то причине, когда я запускаю скрипт, я получаю всплывающее окно Windows, говорящее:

Интерпретатор командной строки Perl перестал работать

Я не могу понять, почему, поскольку я упростил код до его самого необходимого в следующем:

#!C:/Perl/bin/Perl.exe
use LWP::UserAgent;

$URL = 'http://www.google.com';

my $oHTTPAgent = new LWP::UserAgent;
$oRequest = HTTP::Request->new('GET');
$oRequest->url($URL);
$sResponse = $oHTTPAgent->request($oRequest);
if ($sResponse->is_success) {
    $sPage = $sResponse->content;
}

print $sPage;

В чем может быть проблема?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Вы попали на google.com, на котором нет роботов. Я не знаю, в этом ли ваша проблема, но у вас нет другой ветки, если вы получите неудачный ответ. В конце вашей Perl-программы ваша программа завершает работу, ничего не печатая.

use LWP::UserAgent;

$url = 'http://www.perl.com';

my $ua = LWP::UserAgent->new;
my $response = $ua->get( $url );
print $response->content if $response->is_success;

print "I'm done!\n";

Вас также может заинтересовать Mojo :: UserAgent :

use Mojo::UserAgent;

$url = 'http://www.perl.com';

my $ua = Mojo::UserAgent->new;
print $ua->get( $url )->res->body;

print "I'm done!\n";
2 голосов
/ 05 марта 2012

Несколько общих моментов, которые следует учитывать при написании сценариев:

  • Добавить use strict;
  • Добавить use warnings;

Существует ли путь C:/Perl/bin/Perl.exe? Шебанг {#} должен указывать на путь, где установлен Perl.

Несколько переменных, используемых в коде, не объявлены, и после модификации код выглядит следующим образом:

use strict;
use warnings;
use LWP::UserAgent;

my $URL = 'http://www.google.com';
my $oHTTPAgent = new LWP::UserAgent;
my $oRequest = HTTP::Request->new('GET');
$oRequest->url($URL);
my $sResponse = $oHTTPAgent->request($oRequest);
if ($sResponse->is_success) {
    my $sPage = $sResponse->content;
    print $sPage;
}
...