我是perl编程的新手,现在陷入了困境。实际上,我必须解析一个包含单个表的html文件,并且必须从中提取一行,而该行的一个列条目对我来说是已知的。 >
我的html文件看起来像这样-
many previous rows description in html format....
<td>some_value_default</td>
<td>0x0</td>
<td><a href="something" target="xyz">something</a></td>
<td>abcd</td>
//*
<tr><a name="Maximum_Capacity"></a>
<td>some 23:4</td>
<td>some_27: 15</td>
<td>24:29</td>
<td>17</td>
<td colspan=3>Maximum_Capacity</td>
<td colspan=5>
some commonly use value are: 24:31|25:67|677:89|xyz abc
</td>
//*
<td>some_value_default</td>
<td> 0x0</td>
<td><a href="something.html" target="ren">sometext</a></td>
<td>again some text</td>
description of many rows in html afterwards...
// *之间的行表示我要获取的行。我想使用其中包含的信息。如何在数组中获取该行,以便将每个列条目存储为数组元素。>
请大家尝试帮助我。
答案 0 :(得分:5)
使用HTML::TableExtract处理HTML文档中的表。这是一个很棒的工具。
一个非常基本的例子
use warnings;
use strict;
use feature 'say';
use List::MoreUtils qw(none);
use HTML::TableExtract;
my $file = shift @ARGV;
die "Usage: $0 html-file\n" if not $file or not -f $file;
my $html = do { # read the whole file into $html string
local $/;
open my $fh, '<', $file or die "Can't open $file: $!";
<$fh>;
};
my $te = HTML::TableExtract->new;
$te->parse($page);
# Print all tables in this html page
foreach my $ts ($te->tables) {
say "Table (", join(',', $ts->coords), "):";
foreach my $row ($ts->rows) {
say "\t", join ',', grep { defined } @$row;
}
}
# Assume that the table of interest is the second one
my $table = ($te->tables)[1];
foreach my $row ($table->rows) {
# Select the row you need; for example, identify distinct text in a cell
next if none { defined and /Maximum_Capacity/ } @$row;
say "\t", join ',', grep { defined } @$row;
}
该模块提供了多种方法来设置解析首选项,指定表,检索元素,使用标题等。请参阅文档,并在此站点上搜索相关文章。
我使用了List::MoreUtils中的none
来测试列表中是否没有元素满足条件。