Вы можете сделать это с Mojo :: DOM, перебирая ячейки.
use Mojo::DOM;
my (@usernames, @comment_count);
my $dom = Mojo::DOM->new->parse(do { local $/ = undef; <DATA>});
$dom->find('table.table tr')->each(sub {
my $cells = $_->find('td');
push @usernames, $cells->[0]->all_text; # because there's an <a> inside
push @comment_count, $cells->[-1]->text;
});
__DATA__
...
Это создаст эти два массива с вашими примерами данных.
[
[0] "user8",
[1] "user9",
[2] "user11",
[3] "user1",
[4] "user2",
[5] "user3",
[6] "user4",
[7] "user5"
]
[
[0] 0,
[1] 0,
[2] 0,
[3] 23,
[4] 2,
[5] 3,
[6] 4,
[7] 5
]
Код работает найдя и выполнив итерацию по всем строкам таблицы, и получив доступ к данным внутри ячеек по их положению, затем захватив их текстовые узлы.
Я получил это решение, посмотрев на https://mojolicious.org/perldoc/Mojo/DOM для нахождения правильных узлов и https://mojolicious.org/perldoc/Mojo/Collection для проверки того, как повторять результаты. В конечном итоге все парсеры работают одинаково. Если вы понимаете концепцию, лежащую в основе работы с древовидной структурой, на самом деле не имеет значения, какую реализацию вы используете, тогда все просто ищет правильный синтаксис.