我正在使用LWP :: UserAgent来抓取一些页面。为了节省带宽,我不想在页面上下载图像和其他媒体,我只对文本感兴趣。
在文档中找不到任何可以帮助我的内容。请帮忙
答案 0 :(得分:4)
虽然您没有显示任何代码,但我认为您只是在抓取<a href=
链接,而不是任何<img src=
或类似的链接(即视频,css,favicon ..)这显然是您不感兴趣的图像和其他类型的数据。
不幸的是,如果使用<a href=
链接,则无法预先了解这将是什么类型的数据。您可能会根据资源的典型后缀(即image.png
)进行猜测,但您无法确定它到底是什么。只有在访问资源后才能获得此信息,例如通过检查响应头中声明的Content-type
。 LWP提供了一种在下载完整资源之前检查响应头的方法,方法是为response_header
阶段添加处理程序。来自the documentation:
response_header =&gt; sub {my($ response,$ ua,$ h)= @_; ......}
在收到响应标头之后,但在任何内容数据之前调用此处理程序。处理程序可能会为数据设置处理程序,而可能会诋毁以中止请求。
这可用于停止接收任何非文本内容的响应:
my $ua = LWP::UserAgent->new;
$ua->add_handler( response_header => sub {
my $resp = shift;
die "no text" if $resp->content_type !~m{^text/};
});
my $resp = $ua->get('http://example.com/some-image.gif');