有没有简单的方法将HTML文件转换为Perl哈希?例如,一个工作的Perl模块或什么?
我在cpan.org上搜索,但没找到任何可以做我想要的东西。我想做这样的事情:
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');
对此有什么可行的解决方案吗?
答案 0 :(得分: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 :(得分:1)
Mojo::DOM
(docs 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
,它会生成与您描述的数据结构类似的数据结构。