【问题标题】:Perl - Web::Scraper - array of linksPerl - Web::Scraper - 链接数组
【发布时间】:2012-04-16 19:06:47
【问题描述】:

我有这个代码:

#!/opt/local/bin/perl
use 5.014;
use warnings;
use Web::Scraper;
use Data::Dumper;

my $html = do { local $/; <DATA> };

my $br = scraper {
    process 'div#br-wrap > ul', 'bc[]' => scraper {
        process 'li > a', 'link' => '@href';
    };
};
my $res = $br->scrape( $html );
say Dumper($res);

__DATA__
<html>
<head><title>title</title></head>
<body>
    <div id="content">
        <div id="br-wrap">
            <ul class="br">
                <li><a href="/">Home</a></li>
                <li><a href="/sub/xxx">Sub-xxx</a></li>
                <li><a href="/sub/xxx/cat/name">Sub-Cat</a></li>
                <li><a href="/sub/xxx/item">Sub-Item</a></li>
            </ul>
        </div>
    </div>
</body>
</html>

结果是:

$VAR1 = {
          'bc' => [
                    {
                      'link' => '/'
                    }
                  ]
        };

但是,我正在寻找 ARRAY 的链接...

$VAR1 = {
          'bc' => [
                    {
                      'link' => '/'
                    },
                    {
                      'link' => '/sub/xxx'
                    },
                    {
                      'link' => '/sub/xxx/cat/name'
                    },
                    {
                      'link' => '/sub/xxx/item'
                    }
                  ]
        };

代码哪里出错了?

【问题讨论】:

  • 关心反对者告诉我这个问题有什么问题?
  • 就我所知,这是一个好问题的例子

标签: perl web-scraping


【解决方案1】:
process 'div#br-wrap > ul > li', 'bc[]' => scraper {
    process 'a', 'link' => '@href';

【讨论】:

  • 酷 - 你能添加解释 - 为什么?问是因为我想分析“LI > A”系列的“DIV>UL” - 那么为什么需要将“LI”添加到外刮板中?无论如何谢谢!
  • 您实际上还应该将process 'li &gt; a' 替换为process 'a' 以使代码干净。然后它是有道理的,对吧? (答案已更新)
  • 是的,但仍然不明白,为什么我的解决方案不起作用。谢谢 - 将更多地尝试 RTFM.. ;)
  • Web::Scraper 分发包的 eg/ 目录中有很多 examples。建议浏览这些。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 2021-06-01
  • 2019-07-08
  • 2015-02-26
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多