2012-04-16 55 views
3

阵列我有这样的代码:的Perl - 网站::刮板 - 链接

#!/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' 
        } 
        ] 
     }; 

代码中的错误在哪里?

+0

小心选民告诉我这个问题出了什么问题? – jm666 2012-04-28 17:55:13

+0

对于所有我可以告诉它的一个很好的问题的例子 – zdim 2017-03-16 20:53:27

回答

2
process 'div#br-wrap > ul > li', 'bc[]' => scraper { 
    process 'a', 'link' => '@href'; 
+0

酷 - 你能否请添加解释 - 为什么?询问是因为我想分析一系列“LI> A”的“DIV> UL” - 为什么需要将“LI”添加到外刮板中?反正Thanx! – jm666 2012-04-16 19:21:36

+0

你实际上也应该用'process'a''替换'process'li> a''来使代码更加清晰。然后它是有道理的,对吧? (回答更新) – 2012-04-16 19:24:18

+0

是的,但仍不明白,为什么我的解决方案无法正常工作。 Thanx - 将尝试更多的RTFM ..;) – jm666 2012-04-16 19:28:29