【问题标题】:Using Web::Scraper使用 Web::Scraper
【发布时间】:2012-03-22 19:15:45
【问题描述】:

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

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

<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);

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

通过 mob 的贡献解决... #zone-extract 代替 .zone-extract :)

【问题讨论】:

  • 不是.zone-extract 用于具有class="zone-extract" 属性的元素吗?对于id="zone-extract",我想你会想要#zone-extract,不是吗?
  • 感谢 mob 你是对的,它现在可以工作了! :P

标签: perl


【解决方案1】:
#!/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} };

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2015-03-20
    相关资源
    最近更新 更多