在Perl中解析HTML时无法获得内容

时间:2014-02-10 22:18:29

标签: html perl html-tableextract html-treebuilder

我已经解决了这个问题:原来我用WWW加载的页面:: Mechanize使用AJAX加载<tbody>内的所有内容,因此在创建$ html变量时它没有被加载。 现在我必须看看如何获​​得这个动态内容...


我正在尝试解析网页中表格的内容。 <table>包含<thead><tbody>。当我从表格的<tbody>部分获取内容时,我发现它们都没有。我只获取<thead>内的内容。

我尝试了几种不同的方法,所有这些方法都只是在<tbody>内没有给我任何内容。

使用HTML :: TreeBuilder

my $tb = HTML::TreeBuilder->new();
$tb->parse($html);
my $table = $tb->look_down( _tag => 'tbody', id => 'tbody-id' );

使用HTML :: TableExtract

my $te = HTML::TableExtract->new( attribs => { id => 'table-id' } );
$te->parse($html);
my $table=$te->first_table_found;

当我尝试执行表格的print Dumper($table);时,我显示我找到了<table>并且只能看到<thead>或{{}内的表格内容1}}以及对其父级的引用,其中包含<tbody>的所有内容。

我不太关心<thead>中的内容我只需要<thead>中的表格内容。

我不确定我做错了什么,从哪里开始。

1 个答案:

答案 0 :(得分:1)

HTML有效吗?我花了几分钟才得到以下代码,因为我没有正确关闭其中一个代码:

use strict;
use warnings;

use HTML::TreeBuilder;
use Perl6::Say;

my $html = << 'HTML';
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>title</title>
        <link rel="stylesheet" href="style.css">
        <script src="script.js"></script>
    </head>
    <body>
        <table>
            <caption>Caption</caption>
            <thead>
                <tr>
                    <th>Header</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Body</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
HTML

my $tree    = HTML::TreeBuilder->new->parse_content($html);
my $table   = $tree->look_down('_tag', 'table');
my $caption = $table->look_down('_tag', 'caption');
my $thead   = $table->look_down('_tag', 'thead');
my $tbody   = $table->look_down('_tag', 'tbody');

say $caption->as_HTML;
# <caption>Caption</caption>

say $thead->as_HTML;
# <thead><tr><th>Header</th></tr></thead>

say $tbody->as_HTML;
# <tbody><tr><td>Body</td></tr></tbody>