Web爬网程序文本格式



我有以下代码来访问HTML表。

my $table = $tree->look_down(_tag => "table", id => "moduleDetail");

然而,由于网页使用表格边界来划分某些文本片段,因此文本没有格式化。所以它可以归结为这样的东西,"计算jordanstown的数学",我假设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();

注意,我试图使用和数组来分隔文本,但没有成功?任何指针。感谢

如果在树上调用objectify_text方法,访问HTML树的文本节点会变得更容易。这将文本节点从简单字符串更改为具有伪标记名称~text和与文本字符串相等的名为text的属性的HTML::Element实例。这允许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;

使用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());   
}

相关内容

  • 没有找到相关文章

最新更新