perl html treebuilder如何处理错误条件

perl html treebuilder如何处理错误条件,perl,lwp,html-tree,Perl,Lwp,Html Tree,任务非常简单:访问url并根据结果对其进行解析。如果出现错误(404500等),则采取适当的措施。最后一件是我有意见的那件。 我列出了我目前使用的两段代码。较长的(LWP+TreeBuilder)适用于两种情况;较短的一个(TreeBuilder)适用于第一种情况,但不适用于错误情况。如果我使用TreeBuilder,站点返回404或其他错误,脚本就会退出!有什么想法吗 工作时间更长的代码 use LWP::Simple; use LWP::UserAgent; use HTML::TreeBu

任务非常简单:访问url并根据结果对其进行解析。如果出现错误(404500等),则采取适当的措施。最后一件是我有意见的那件。
我列出了我目前使用的两段代码。较长的(LWP+TreeBuilder)适用于两种情况;较短的一个(TreeBuilder)适用于第一种情况,但不适用于错误情况。如果我使用TreeBuilder,站点返回404或其他错误,脚本就会退出!有什么想法吗

工作时间更长的代码

use LWP::Simple; use LWP::UserAgent; use HTML::TreeBuilder; $url="http://some_url.com/blahblah" ; $response = LWP::UserAgent->new->request( HTTP::Request->new( GET => $url )); if ($response->is_success) { $p = HTML::TreeBuilder->new(); $p->parse($response->content); } else { warn "Couldn't get $url: ", $response->status_line, "\n"; } 使用LWP::Simple; 使用LWP::UserAgent; 使用HTML::TreeBuilder; $url=”http://some_url.com/blahblah" ; $response=LWP::UserAgent->new->request(HTTP::request->new(GET=>$url)); 如果($response->is\u success){ $p=HTML::TreeBuilder->new(); $p->parse($response->content); }否则{ 警告“无法获取$url:”,$response->状态行“\n”; } 不需要的较短的

use HTML::TreeBuilder; $url="http://some_url.com/blahblah" ; $tree = HTML::TreeBuilder->new_from_url($url) ; 使用HTML::TreeBuilder; $url=”http://some_url.com/blahblah" ; $tree=HTML::TreeBuilder->new\u from\u url($url); 脚本只是退出

不,它抛出一个异常。如果需要,您总是可以使用
eval BLOCK
捕获异常

my $tree = eval { HTML::TreeBuilder->new_from_url($url) }
   or warn($@);
脚本只是退出

不,它抛出一个异常。如果需要,您总是可以使用
eval BLOCK
捕获异常

my $tree = eval { HTML::TreeBuilder->new_from_url($url) }
   or warn($@);
引述:

如果LWP无法获取URL,或者响应不是HTML(由HTTP::Headers中的
content\u is\u HTML
确定),则
new\u from\u URL
死亡,并且HTTP::response对象位于
$HTML::TreeBuilder::LWP\u response

试试这个:

use strict;
use warnings;
use HTML::TreeBuilder 5; # need new_from_url
use Try::Tiny;

my $url="http://some_url.com/blahblah" ;
my $p = try { HTML::TreeBuilder->new_from_url($url) };
unless ($p) {
    my $response = $HTML::TreeBuilder::lwp_response;
    if ($response->is_success) {
        warn "Content of $url is not HTML, it's " . $response->content_type . "\n";
    } else {
        warn "Couldn't get $url: ", $response->status_line, "\n";
    }
}
引述:

如果LWP无法获取URL,或者响应不是HTML(由HTTP::Headers中的
content\u is\u HTML
确定),则
new\u from\u URL
死亡,并且HTTP::response对象位于
$HTML::TreeBuilder::LWP\u response

试试这个:

use strict;
use warnings;
use HTML::TreeBuilder 5; # need new_from_url
use Try::Tiny;

my $url="http://some_url.com/blahblah" ;
my $p = try { HTML::TreeBuilder->new_from_url($url) };
unless ($p) {
    my $response = $HTML::TreeBuilder::lwp_response;
    if ($response->is_success) {
        warn "Content of $url is not HTML, it's " . $response->content_type . "\n";
    } else {
        warn "Couldn't get $url: ", $response->status_line, "\n";
    }
}

接受+1。我喜欢这个解决方案,因为它允许我获取错误的状态代码。接受+1。我喜欢这个解决方案,因为它允许我获取错误的状态代码。