使用Web :: Scraper

时间:2012-03-22 19:15:46

标签: perl

我试图使用perl模块Web :: Scraper解析一些html标签,但似乎是使用perl的无能为力。我想知道是否有人可以在我的代码中查找错误......:

这是我要解析的HTML( li 标签内的2个网址):

<more html above here>
<div class="span-48 last">
<div class="span-37">
  <div id="zone-extract" class="123">
      <h2 class="genres"></h2>  
                <li><a href="**URL_TO_EXTRACT_1**">1</a></li>
                <li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li>
        <li class="first">Pàg</li>
  </div>
</div>      
</div>
<more stuff from here>

我试图获得:

ID:1链接:URL_TO_EXTRACT_1

ID:2链接:URL_TO_EXTRACT_2

使用这个perl代码:

my $scraper = scraper {
    process ".zone-extract > a[href]", urls => '@href', id => 'TEXT';
    result 'urls';
};
my $links = $scraper->scrape($response);

这是我尝试过的无限进程组合之一,有两个不同的结果:一个空的返回,或代码中的所有url(我只需要在zone-extract中的链接)。

解决了暴徒的贡献...... #zone-extract而不是.zone-extract:)

1 个答案:

答案 0 :(得分:2)

#!/usr/bin/env perl 
use strict;
use warnings;

use Web::Scraper;

my $html = q[
<div class="span-48 last">
<div class="span-37">
<div id="zone-extract" class="123">
<h2 class="genres"></h2>  
<li><a href="**URL_TO_EXTRACT_1**">1</a></li>
<li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li>
<li class="first">Pàg</li>
</div>
</div>      
</div>
];      # / (turn off wrong syntax highlighting)

my $parser = scraper {
    process '//div[@id="zone-extract"]//a', 'urls[]' => sub {
        my $url =  $_[0]->attr('href') ;
        return $url;
    };

};

my $ref = $parser->scrape(\$html);

print "$_\n" for @{ $ref->{urls} };