Извлечение содержимого таблицы HTML на основе "thead"
Вот основная таблица HTML:
<table>
<thead>
<td class="foo">bar</td>
</thead>
<tbody>
<td>rows</td>
…
</tbody>
</table>
Предположим, в исходном файле есть несколько таких таблиц. Есть ли вариант hxextract
или селектор CSS3, который я мог бы использовать hxselect
или какой-либо другой инструмент, который позволил бы извлечь одну конкретную таблицу, либо на основе содержимого thead
или на его класс, если он существует? Или я застрял с не так просто awk
(или, может быть, Perl, как было найдено до отправки) сценариев?
Обновление: для извлечения содержимого на основе Perl HTML::TableExtract
делает трюк:
#!/usr/bin/env perl
use open ':std', ':encoding(UTF-8)';
use HTML::TableExtract;
# Extract tables based on header content, slice_columns helpful if colspan issues
$te = HTML::TableExtract->new( headers => ['Multi'], slice_columns => 0);
$te->parse_file('mywebpage.html');
# Loop on all matching tables
foreach $ts ($te->tables())
{
# Print table identification
print "Table (", join(',', $ts->coords), "):\n";
# Print table content
foreach $row ($ts->rows)
{
print join(':', @$row), "\n";
}
}
Однако в некоторых случаях простой lynx -dump mywebpage.html
в сочетании с awk
или что угодно может быть столь же эффективным.
1 ответ
Это потребовало бы родительского селектора или реляционного селектора, который еще не существует (и к тому времени, когда он существует, hxselect
может не реализовать его, потому что он даже не полностью реализует текущий стандарт на момент написания этой статьи). hxextract
Похоже, что он извлекает элемент только по его типу и / или имени класса, поэтому лучше всего это сделать td.foo
, который бы вернул td
только не его thead
или же table
,
Если вы обрабатываете этот HTML из командной строки, вам понадобится скрипт.