使用LWP获取网页内容

时间:2012-03-05 11:27:49

标签: perl lwp

我正在尝试使用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 个答案:

答案 0 :(得分:2)

你正在点击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";

答案 1 :(得分:1)

脚本编写时很少考虑以下事项:

-> use strict;
-> use warnings;

路径C:/Perl/bin/Perl.exe是否存在?
shebang {#}应该指向安装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; 
    }