Извлечение содержимого таблицы 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 из командной строки, вам понадобится скрипт.

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