2012-04-16 54 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