我试图使用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:)
答案 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} };