从URL的HTML内部的输入标记中提取值

时间:2015-07-16 09:33:34

标签: html perl

我有一些HTML页面。这是样本表格数据

<input type=hidden id=batterystatus value="Charging" >
<input type=hidden id=batterylevel value="80&nbsp;%" >
<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页面中的Charging5 kbps136 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";
}

输出: 我运行代码,它什么都没显示,没有任何错误。 没有打印任何内容。

2 个答案:

答案 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&nbsp;%" ><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');
}