2012-03-05 243 views
0

我试图使用LWP :: UserAgent来收集网页的内容,但由于某种原因,当我运行脚本时,我得到一个Windows弹出窗口,说“Perl命令行解释器已停止加工”。我不明白为什么,因为我已经简化了代码到它的基本要点如下:使用LWP获取网页内容

#!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; 

任何想法?

-> use strict; 
-> use warnings; 

是否路径C:/Perl/bin/Perl.exe存在:

感谢,

艾伦

+0

,看起来像它应该工作,它不是一个代码问题,你有没有尝试过直接在脚本运行的Perl? – AntonioD 2012-03-05 11:30:47

+0

感谢您的回复。你是什​​么意思直接在脚本上运行perl?我从命令行运行这个脚本。最初这个代码块来自构成Web表单的大部分代码。 – user1249684 2012-03-05 11:35:02

+0

我的意思是尝试运行C:\ Perl \ bin \ Perl.exe C:\ path \ to \ script.pl – AntonioD 2012-03-05 11:37:59

回答

1

一些常见的事情,而脚本来考虑?
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; 
    } 
+0

我试过这个代码字,仍然给出了同样的错误。我相信这不是一个语法或逻辑错误,而是与Windows有关。我已经尝试了上述代码与不同的网页无济于事。也许它与我的安装有关。请注意,我在这台计算机上运行了大量其他Perl脚本(不使用LWP)并且没有任何问题。奇怪的。 – user1249684 2012-03-06 10:56:04

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";