【问题标题】:Get more than one result from HTML::TreeBuilder从 HTML::TreeBuilder 获得多个结果
【发布时间】:2013-11-05 05:10:33
【问题描述】:

我正在尝试解析一个 html 文件并提取一些信息并对其进行统计。

但我的问题是,HTML::TreeBuilder 只返回 1 个结果,但我需要正则表达式捕获的所有结果。

#!/bin/perl
use strict;
use warnings;

use Data::Dumper;
use HTML::TreeBuilder;


my $tree = HTML::TreeBuilder->new();
$tree->parse_file('tester.html');
print Dumper($tree->look_down(_tag => 'table',id => qr{post[0-9]*?})->as_HTML);
$tree->delete;

tester.html:

<table id="post923076">
     <tr>
        <td>table1_result</td>
    </tr>
</table>
<table id="post923076">
    <tr>
       <td>table2_result</td>
    </tr>
</table>

我的结果:

$VAR1 = '<table id="post923076"><tr><td>table1_result</td></tr></table>';

有人出主意吗?

例如,我已经缩短了文件,因为该文件可以包含很多这样的表格。

【问题讨论】:

  • 也许-&gt;as_HTML 只取第一个元素? look_down 返回一个数组.. 尝试转储 look_down 而不使用 as_HTML(这样我们可以看到数组)

标签: perl html-parsing


【解决方案1】:

在标量上下文中,返回look_down 的第一个结果。

由于链接look_down-&gt;as_HTML,您在标量上下文中使用。

在列表上下文中调用,然后使用map 将每个元素转换为 HTML。

print Dumper(map { $_->as_HTML } $tree->look_down(_tag => 'table', id => qr{post[0-9]*?}));

【讨论】:

  • 非常感谢 :) 学习 perl 的新知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 2012-03-25
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多