gpt4 book ai didi

regex - 解析不同列数的 HTML 表格

转载 作者:行者123 更新时间:2023-12-01 16:02:16 25 4
gpt4 key购买 nike

我需要从 HTML 表中解析监控数据以进行记录。

HTML 文档中有多个表格没有任何标识符,因此识别正确的 TR 需要即兴发挥。

感兴趣的特定行是:

<TR>
<TD>Signal to Noise Ratio</TD>
<TD>35 dB</TD>
<TD>35 dB</TD>
<!-- MORE TDs continue here... -->
</TR>

因此,可以使用的标识符/常量是 TR 中的“信噪比”字符串,用于识别文档中感兴趣的正确 TD。

第一个包含此行中标识字符串的 TD 元素的数量是可变的。我需要将这些元素中的所有整数存储为变量,类似于:

my %data;
my @keys = qw(SNR1 SNR2 SNR3 SNR4);

my $content = LWP::Simple::get("http://192.168.100.1/cmSignalData.htm")
or die "Couldn't get it!";

if ( $content =~ /<TD>(.+?) dB<\/TD>/ ) {
$data{SNR1} = $1;
}

for (@keys) {
print "$_:" . $data{$_} . " ";
}
print "\n";

然后以完全相同的模式解析其他表中的其他 TR 元素。

最佳答案

您可以使用 XPath 查询轻松获得所需的值,因为您正在查找特定 td 节点之后同一级别的所有以下 td 节点。

这是一个使用 HTML::TreeBuilder::XPath 的例子模块:

use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file("yourfile.html");

my @snr = $tree->findvalues('//td[.="Signal to Noise Ratio"]/following-sibling::td');
$tree->delete;

@snr = map /^(\d+)/, @snr;
print join(', ', @snr);

XPath 是一种查询 HTML/XML 文档树表示的语言,DOM (Document Object Model) tree .

查询详情:

//   # anywhere in the tree (*)
td # a `td` element with the following "predicate" (embedded in square brackets):

[.="Signal to Noise Ratio"] # predicate: the text content of the current node (figured
# by a dot) is exactly "Signal to Noise Ratio"

/following-sibling::td # 'following-sibling::' is a kind of selector called "axis"
# that selects all nodes with the same parent node after the
# current element.
# 'td' selects only `td` elements in this node-set.

(*) 如果您愿意,可以更明确。您可以从根元素/html/body/center/table/tbody/tr/td描述完整路径,而不是使用//td/sup>

此方法需要构建文档树才能对其进行查询。这不是一种快速的方法,但主要优点是您使用 HTML 结构而不是通配文本方法。

请注意,您可以避免使用数组 map 来提取每个项目开头的数字。 XPath 有几个字符串函数,包括 substring-before:

//td[.="Signal to Noise Ratio"]/following-sibling::td/substring-before(text(), " dB")

如果性能很重要,您可以使用拉式解析器尝试另一种方法,例如 HTML::TokeParser::Simple .这写起来不太方便,但速度更快,因为没有要构建的 DOM 树,而且您将节省内存,因为您可以将 HTML 文件作为流读取,并在需要时停止读取它,而无需将整个文件加载到内存中。

关于regex - 解析不同列数的 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com