2013-10-25 99 views
1

我試圖解析一個html文件並提取一些信息並對其進行統計。從HTML :: TreeBuilder獲取多個結果

但我的問題是,該HTML :: TreeBuilder只返回1結果,但我需要正則表達式捕獲的所有結果。

#!/bin/perl 
use strict; 
use warnings; 

use Data::Dumper; 
use HTML::TreeBuilder; 


my $tree = HTML::TreeBuilder->new(); 
$tree->parse_file('tester.html'); 
print Dumper($tree->look_down(_tag => 'table',id => qr{post[0-9]*?})->as_HTML); 
$tree->delete; 

tester.html:

<table id="post923076"> 
    <tr> 
     <td>table1_result</td> 
    </tr> 
</table> 
<table id="post923076"> 
    <tr> 
     <td>table2_result</td> 
    </tr> 
</table> 

我的結果:

$VAR1 = '<table id="post923076"><tr><td>table1_result</td></tr></table>'; 

有人的想法?

我縮短了文件,例如因爲該文件可能包含很多這種表格。

+0

也許' - > as_HTML'只取第一個元素? look_down返回一個數組..嘗試在沒有'as_HTML'的情況下傾銷'look_down'(所以我們可以看到數組) – orhanhenrik

回答

11

在標量環境下,返回look_down的第一個結果。

由於鏈接look_down->as_HTML,您在標量環境中使用。

在列表上下文中調用,然後使用map將每個元素轉換爲HTML。

print Dumper(map { $_->as_HTML } $tree->look_down(_tag => 'table', id => qr{post[0-9]*?})); 
+0

Thx很多:) 學習一些新的Perl。 – demonking