2013-08-07 33 views
1

有沒有簡單的方法將HTML文件轉換爲Perl哈希?例如一個工作的Perl模塊或東西?如何將HTML文件轉換爲Perl中的散列?

我是cpan.org搜索,但did'nt發現什麼有什麼可以做我想做的。我想要做這樣的事情:

use Example::Module; 
my $hashref = Example::Module->new('/path/to/mydoc.html'); 

此我想引用第二div元素這樣的事情後:

my $second_div = $hashref->{'body'}->{'div'}[1]; 
# or like this: 
my $second_div = $hashref->{'body'}->{'div'}->findByClass('.myclassname'); 
# or like this: 
my $second_div = $hashref->{'body'}->{'div'}->findById('#myid'); 

有沒有什麼有效的解決方案爲這個?

回答

4

HTML::TreeBuilder::XPath爲您提供比簡單哈希更多的功能。

從簡介:

use HTML::TreeBuilder::XPath; 
    my $tree = HTML::TreeBuilder::XPath->new; 
    $tree->parse_file("mypage.html"); 
my $nb=$tree->findvalue('/html/body//p[@class="section_title"]/span[@class="nb"]'); 
    my $id=$tree->findvalue('/html/body//p[@class="section_title"]/@id'); 
    my $p= $html->findnodes('//p[@id="toto"]')->[0]; 

    my $link_texts= $p->findvalue('./a'); # the texts of all a elements in $p 

    $tree->delete; # to avoid memory leaks, if you parse many HTML documents 

更多XPath

1

Mojo::DOMdocs found here)建立了一個簡單的DOM,可以在一個CSS選擇器樣式訪問:

# Find 
say $dom->at('#b')->text; 
say $dom->find('p')->pluck('text'); 
say $dom->find('[id]')->pluck(attr => 'id'); 

如果你使用XHTML,你也可以使用XML::Simple,產生類似的數據結構到你描述的那個。

+0

[Web :: Query](http://p3rl.org/Web::Query)支持更多。 – daxim

相關問題