Разбор HTML в Perl
Я пытаюсь разобрать следующую структуру HTML с в Perl. Мне нужно выбрать все элементы dd, которые содержат сообщение класса, а также идентификатор. Все, что я хотел бы, чтобы скрипт выполнял, это перебирал все элементы dd и выводил идентификатор элемента dd, но он должен игнорировать первый элемент dd, поскольку он статический и не изменится.
Это может быть с любым модулем perl, если его можно установить из cpan, чтобы мне было проще. У меня нет большого опыта работы с Perl и парсингом HTML, поэтому любые указатели были бы очень полезны.
Спасибо:)
Структура HTML:
<pre><code>
<html>
<head>
</head>
<body>
.....other elements
<div id="messages">
<div class="header"></div>
<dl>
<dd class="message unread mc-friend mc-message">This is just a random message, do not parse</dd>
<dd id="msg2" class="message unread mc-message">
Hello
</div>
<dd id="msg3" class="message unread mc-message">
Hello
</dd>
</dl>
</div>
</body>
</html>
</pre></code>
2 ответа
Решение
Примерно так, быстро и просто:
#! /usr/bin/perl
use strict;
use warnings;
use Mojo::DOM;
my $html = "Your HTML goes here";
my $dom = Mojo::DOM->new;
$dom->parse($html);
my $skip;
for my $dd ($dom->find('dd[class*="message"]')->each) {
print $dd->attrs->{id}, "\n" if $skip++;
}
Взгляните на HTML:: Parser или еще лучше HTML:: TreeBuilder
Больше на TreeBuilder.