我有以下代码来访问HTML表格。
my $table = $tree->look_down(_tag => "table", id => "moduleDetail");
然而,文本没有格式化,因为网页使用表格边框来划分某些文本。所以它就像这样,#34;数学计算乔丹斯敦"和jordanstown在一起,我假设在下一个细胞中。这是我正在使用的代码,
my @array;
my $tree = HTML::TreeBuilder->new_from_content($mech->content);
my $table = $tree->look_down(_tag => "table", id => "moduleDetail");
for ($table ->look_down(_tag => 'tr')) {
push(@array,$_->as_text());
}
foreach(@array){
print $_, " ";
}
$tree->delete();
注意我试图将文本与数组分开,但没有运气?任何指针。谢谢
答案 0 :(得分:1)
如果在树上调用objectify_text
方法,则可以更轻松地访问HTML树的文本节点。这会将文本节点从简单字符串更改为HTML::Element
的实例,其伪标记名称为~text
,而名为text
的属性则等于文本字符串。这允许look_down
方法搜索文本节点。
如果你这样重新编码,你将获得推送到数组上的每个单独文本节点的值。
my $tree = HTML::TreeBuilder->new_from_content($mech->content);
$tree->objectify_text;
my $table = $tree->look_down(_tag => "table", id => "moduleDetail");
my @text;
for my $tr ($table->look_down(_tag => '~text')) {
my $text = $tr->attr('text');
push @text, $text if $text =~ /\S/;
}
print "$_\n" for @text;
答案 1 :(得分:0)
使用HTML :: TreeBuilder :: XPath
我建议使用Perl模块HTML::TreeBuilder::XPath。它应该给你你想要的东西。
从文档中,我相信您的代码看起来像使用XPath模块
my $tree = HTML::TreeBuilder::XPath->new_from_content($mech->content);
my @trArray = $tree->findnodes_as_string( '//table[@id="moduleDetail"]/tr/td');
$tree->delete();
有关XPath的更多信息,请参阅http://www.w3schools.com/xpath/。
使用HTML :: TreeBuilder
如果您想坚持使用HTML::TreeBuilder,那么您需要执行以下操作
my $tree = HTML::TreeBuilder->new_from_content($mech->content);
my $table = $tree->look_down(_tag => "table", id => "moduleDetail");
for ($table->look_down(_tag => 'td')) {
push(@array,$_->as_text());
}