在抓取

时间:2016-12-10 12:30:05

标签: perl web-scraping lwp lwp-useragent

我正在使用LWP :: UserAgent来抓取一些页面。为了节省带宽,我不想在页面上下载图像和其他媒体,我只对文本感兴趣。

在文档中找不到任何可以帮助我的内容。请帮忙

1 个答案:

答案 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');