Разбор 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.

Другие вопросы по тегам