在 <tbody> Perl 中解析 HTML 时无法获取内容



我已经解决了这个问题:原来我用WWW::Mechanical加载的页面使用AJAX加载<tbody>中的所有内容,所以在我创建$html变量时不会加载它。现在我必须看看如何获得这些动态内容。。。


我正在尝试解析网页中表格的内容。CCD_ 2包含CCD_ 3和CCD_。当我从表的<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><tbody>内部的表内容以及对其父级的引用,该引用包含来自<thead>的所有内容。

我可以不太关心<thead>中的内容,我只需要<tbody>中的表内容。

我不知道我做错了什么,也不知道该何去何从。

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>

相关内容

  • 没有找到相关文章

最新更新