基于“thead”提取HTML表格内容

时间:2014-09-22 08:39:59

标签: css-selectors html-table text-processing html-tableextract html-xml-utils

这是一个基本的HTML表格:

<table>
  <thead>
    <td class="foo">bar</td>
  </thead>
  <tbody>
    <td>rows</td>
    …
  </tbody>
</table>

假设源文件中有几个这样的表。是否有hxextract选项,或者我可以与hxselect或其他工具一起使用的CSS3选择器,它可以提取一个特定的表,基于thead的内容或其类别(如果存在)?还是我坚持不是那么简单awk(或提交前发现的maybe 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耦合wih awk或其他任何东西都可以同样有效。

1 个答案:

答案 0 :(得分:2)

这需要父选择器或关系选择器which does not as yet exist(当它存在时,hxselect可能无法实现它,因为它甚至没有完全实现当前标准写作)。 hxextract似乎只按其类型和/或类名称检索元素,因此它最好的是td.foo,它只会返回td,而不是thead { {1}}或table

如果从命令行处理此HTML,则需要一个脚本。