0

这是一个基本的 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或任何方式都可以同样有效。

4

1 回答 1

2

这将需要一个尚未存在的父选择器或关系选择器(并且在它确实存在时,hxselect可能无法实现它,因为它甚至没有完全实现在撰写本文时的当前标准)。hxextract似乎只通过其类型和/或类名检索元素,因此最好的方法是td.foo,它将返回td唯一的,而不是它的theador table

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

于 2014-09-22T11:31:53.380 回答