我有一些HTML页面。这是样本表格数据
<input type=hidden id=batterystatus value="Charging" >
<input type=hidden id=batterylevel value="80 %" >
<input type=hidden id=signalStrength value="4" >
<input type=hidden id=ulCurrentDataRate value="5 Kbps" >
<input type=hidden id=dlCurrentDataRate value="136 Kbps" >
<input type=hidden id=ConnectionTime value="00:15:33:10" >
<input type=hidden id=noOfClient value="2" >
如何提取页面中一组value
标记中的<input>
属性。例如,我对HTML页面中的Charging
,5 kbps
或136 Kbps
等数据感兴趣。
检索完每个值后,我需要将它们写入Excel工作表,并将这些值与存储在另一个Excel文件中的一组预定义值进行比较,并准备传递失败报告。
编辑:现在我想从网址做同样的事情。这是我正在使用的一段代码:
use Browser::Open qw( open_browser );
use HTML::TokeParser::Simple;
use strict;
use warnings;
my $url = 'http://192.168.225.1';
my $parser = HTML::TokeParser::Simple->new(url => $url);
my %tags;
while (my $tag = $parser->get_tag('input')) {
my $id=$tag->get_attr('id'); # get id attribute value
my $value = $tag->get_attr('value'); # get value attribute value
$tags{$id}=$value;
}
for (keys %tags){
print "$_ => $tags{$_} \n";
}
输出: 我运行代码,它什么都没显示,没有任何错误。 没有打印任何内容。
答案 0 :(得分:1)
从你的问题我假设你对整个html页面中输入标签的Value属性感兴趣。
为此,您可以使用HTML::TokeParser::Simple来解析html
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser::Simple;
my $filename="file.html";
my $parser = HTML::TokeParser::Simple->new($filename);
my %tags;
while (my $tag = $parser->get_tag('input')) {
my $id=$tag->get_attr('id'); # get id attribute value
my $value = $tag->get_attr('value'); # get value attribute value
$tags{$id}=$value;
}
for (keys %tags){
print "$_ => $tags{$_} \n";
}
这些值保存在%tags
哈希中,id
为关键字,value
为值。
输出:
batterystatus => Charging
dlCurrentDataRate => 136 Kbps
noOfClient => 2
ulCurrentDataRate => 5 Kbps
batterylevel => 80�%
ConnectionTime => 00:15:33:10
signalStrength => 4
现在您可以保存excel所需的值。
注意:如果您不熟悉Perl,请选中tagwiki。
答案 1 :(得分:0)
我喜欢HTML::TreeBuilder这样的工作。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use HTML::TreeBuilder;
my $html = '<input type=hidden id=batterystatus value="Charging" ><input type=hidden id=batterylevel value="80 %" ><input type=hidden id=signalStrength value="4" ><input type=hidden id=ulCurrentDataRate value="5 Kbps" ><input type=hidden id=dlCurrentDataRate value="136 Kbps" ><input type=hidden id=ConnectionTime value="00:15:33:10" ><input type=hidden id=noOfClient value="2" >';
my $doc = HTML::TreeBuilder->new_from_content($html);
foreach (qw[batterystatus ulCurrentDataRate dlCurrentDataRate]) {
my $node = $doc->look_down(
_tag => 'input',
id => $_,
);
say "$_ is ", $node->attr('value');
}