Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用html::TreeBuilder在html文件中查找值_Perl - Fatal编程技术网

Perl 使用html::TreeBuilder在html文件中查找值

Perl 使用html::TreeBuilder在html文件中查找值,perl,Perl,下面是我在html文件中的数据。我想使用“html::TreeBuilder”查找html文件中的值 主域 myabcab.com 主目录 /主页/abc 上次从登录 22.32.232.223 磁盘空间使用率 30.2 / ∞ MB 0 每月带宽传输 0 / ∞ MB 0 如何使用“HTML::TreeBuilder”查找“磁盘使用空间”值。我有许多tds,它们具有上述代码中的相同类,找到具有匹配内容的,在本例中为“磁盘空间使用情况”,然后找到下一个 一旦有了元素

下面是我在html文件中的数据。我想使用“html::TreeBuilder”查找html文件中的值


主域
myabcab.com
主目录
/主页/abc
上次从登录
22.32.232.223 
磁盘空间使用率
30.2 / ∞ MB
0 每月带宽传输 0 / ∞ MB
0
如何使用“HTML::TreeBuilder”查找“磁盘使用空间”值。我有许多tds,它们具有上述代码中的相同类,

找到具有匹配内容的
,在本例中为“磁盘空间使用情况”,然后找到下一个

一旦有了元素树:

my $usage = $t->look_down(
    _tag => 'td',
    sub {
        $_[0]->as_trimmed_text() =~ /^Disk Space Usage$/
    }
)->right()->as_trimmed_text();
如果
look\u down
没有找到匹配项,您可能需要将其包装在一个eval块中

元素中的树导航方法是有效使用HTML::TreeBuilder的关键部分


莫希尼问,“为什么这不起作用?”

(格式由我添加)

look_down
从调用它的根节点开始,向下查看元素树(这些树向下生长),并根据上下文返回匹配节点列表或第一个匹配节点

由于所有向下查找的调用都在树上,所以每次通过循环都会重复找到相同的节点

您的循环应该更像这样:

my %table_stuff;

for my $odd_row ( $tree->look_down( _tag => q{tr}, 'class' => 'row-odd' ) ) {

    $heading = $odd_row->look_down(
         _tag => q{td},
         'class' => 'stats_left'
    );

    $table_stuff{ $heading->as_trimmed_text() } = $heading->right()->as_trimmed_text();
}
这将使用表元素填充哈希

如果只需要一个值,则根本不使用循环<代码>向下查看已充当循环

my $heading = $t->look_down(
    _tag => 'td',
    sub {
        $_[0]->as_trimmed_text() =~ /^Home Directory$/
    }
);

my $value = $heading->right();

#  Now $heading and $value have HTML::Element nodes that you can do whatever you want with.

my $disk_value = $value->as_trimmed_text();
my $disk_space = $heading->as_trimmed_text();
查找带有匹配内容的
,在本例中为“磁盘空间使用情况”,然后查找下一个

一旦有了元素树:

my $usage = $t->look_down(
    _tag => 'td',
    sub {
        $_[0]->as_trimmed_text() =~ /^Disk Space Usage$/
    }
)->right()->as_trimmed_text();
如果
look\u down
没有找到匹配项,您可能需要将其包装在一个eval块中

元素中的树导航方法是有效使用HTML::TreeBuilder的关键部分


莫希尼问,“为什么这不起作用?”

(格式由我添加)

look_down
从调用它的根节点开始,向下查看元素树(这些树向下生长),并根据上下文返回匹配节点列表或第一个匹配节点

由于所有向下查找的调用都在树上,所以每次通过循环都会重复找到相同的节点

您的循环应该更像这样:

my %table_stuff;

for my $odd_row ( $tree->look_down( _tag => q{tr}, 'class' => 'row-odd' ) ) {

    $heading = $odd_row->look_down(
         _tag => q{td},
         'class' => 'stats_left'
    );

    $table_stuff{ $heading->as_trimmed_text() } = $heading->right()->as_trimmed_text();
}
这将使用表元素填充哈希

如果只需要一个值,则根本不使用循环<代码>向下查看已充当循环

my $heading = $t->look_down(
    _tag => 'td',
    sub {
        $_[0]->as_trimmed_text() =~ /^Home Directory$/
    }
);

my $value = $heading->right();

#  Now $heading and $value have HTML::Element nodes that you can do whatever you want with.

my $disk_value = $value->as_trimmed_text();
my $disk_space = $heading->as_trimmed_text();

TreeBuilder具有双重效力!;-)@道蟾蜍:我使用了下面的代码,但这些代码不起作用。我不能这样做吗;使用警告;使用HTML::TreeBuilder;my$tree=HTML::TreeBuilder->new_from_文件(“index.HTML”);我的$disk\u值;我的$disk\u空间;对于($tree->look\u down($tag=>q{tr},'class'=>'row odd')){$disk\u space=$tree->look\u down($tag=>q{td},'class'=>'stats\u left')->作为修剪的文本;如果($disk\u space eq'Home Directory'){$disk\u value=$tree->look\u down($disk tag=>q{td},'class'=>'stats\u right')->作为修剪的文本();}打印str}“我的主值是$disk\u space:$disk\u value\n”;TreeBuilder是双重有效的!;-)@daotoad:我使用了下面的代码,但它不起作用。我不能这样做吗使用严格的;使用警告;使用HTML::TreeBuilder;我的$tree=HTML::TreeBuilder->new from\u file(“index.HTML”);我的$disk\u值;我的$disk\u space;for($tree->look\u down(\u tag=>q{}},'class'=>'行奇数'){$disk\u space=$tree->look\u down(_tag=>q{td},'class'=>'stats\u left')->作为修剪过的文本;if($disk\u space eq'Home Directory'){$disk\u value=$tree->look\u down(_tag=>q{td},'class'=>'stats\u right')->作为修剪过的文本()->打印STDERR“我的主值是$disk\u space disk\u space value:$disk\n”;