这是一个基本的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
或其他任何东西都可以同样有效。
答案 0 :(得分:2)
这需要父选择器或关系选择器which does not as yet exist(当它存在时,hxselect
可能无法实现它,因为它甚至没有完全实现当前标准写作)。 hxextract
似乎只按其类型和/或类名称检索元素,因此它最好的是td.foo
,它只会返回td
,而不是thead
{ {1}}或table
。
如果从命令行处理此HTML,则需要一个脚本。