2013-08-07 2 views
1

Есть ли простой способ конвертировать HTML-файл в хеш-файл Perl? Например, работающие модули Perl или что-то еще?Как преобразовать HTML-файл в хэш в 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'); 

Есть ли рабочий раствор для этого?

ответ

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::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, производящий структуру данных, аналогичную к тому, который вы описываете.

+0

[Web :: Query] (http://p3rl.org/Web::Query) поддерживает больше. – daxim

Смежные вопросы