Не удается получить содержимое <tbody> при разборе HTML в Perl
Я решил это: получается, что страница, которую я загружал с WWW::Mechanize, использует AJAX для загрузки всего содержимого, которое находится внутри <tbody>
поэтому он не загружается, когда я создал переменную $html. Теперь я должен увидеть, как получить этот динамический контент...
Я пытаюсь проанализировать содержимое таблицы на веб-странице. <table>
содержит <thead>
и <tbody>
, Когда я иду, чтобы получить содержание от <tbody>
Часть таблицы я считаю, что ничего этого там нет. Я получаю только контент, который находится внутри <thead>
,
Я попробовал несколько различных методов, следуя всем, которые просто ничего не дают мне изнутри <tbody>
,
используя HTML::TreeBuilder
my $tb = HTML::TreeBuilder->new();
$tb->parse($html);
my $table = $tb->look_down( _tag => 'tbody', id => 'tbody-id' );
используя HTML::TableExtract
my $te = HTML::TableExtract->new( attribs => { id => 'table-id' } );
$te->parse($html);
my $table=$te->first_table_found;
когда я пытаюсь сделать print Dumper($table);
из таблицы, которую я показываю, что я нахожу <table>
и может видеть только содержимое таблицы внутри <thead>
или <tbody>
и ссылка на его родителя, который содержит весь контент из <thead>
,
Я мог бы заботиться о содержании в <thead>
Мне просто нужно содержимое таблицы из <tbody>
,
Я не уверен, что я делаю неправильно и куда идти отсюда.
1 ответ
HTML верен? Мне потребовалось несколько минут, чтобы заставить работать следующий код, потому что я неправильно закрыл один из тегов:
use strict;
use warnings;
use HTML::TreeBuilder;
use Perl6::Say;
my $html = << 'HTML';
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>title</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<table>
<caption>Caption</caption>
<thead>
<tr>
<th>Header</th>
</tr>
</thead>
<tbody>
<tr>
<td>Body</td>
</tr>
</tbody>
</table>
</body>
</html>
HTML
my $tree = HTML::TreeBuilder->new->parse_content($html);
my $table = $tree->look_down('_tag', 'table');
my $caption = $table->look_down('_tag', 'caption');
my $thead = $table->look_down('_tag', 'thead');
my $tbody = $table->look_down('_tag', 'tbody');
say $caption->as_HTML;
# <caption>Caption</caption>
say $thead->as_HTML;
# <thead><tr><th>Header</th></tr></thead>
say $tbody->as_HTML;
# <tbody><tr><td>Body</td></tr></tbody>