2012-04-06 48 views
0

我有以下代码来访问HTML表格。网络爬虫文本格式

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

但是由于网页使用表格边界来划分某些文本段,因此文本未下达格式。所以它就像这样下来,“计算乔丹斯敦的数学”和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

你能告诉我们一些输入文字吗? – 2012-04-06 21:22:13

回答

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,那么你需要做的HTML树的下面

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()); 
} 
+0

什么是Xpath我该如何使用它? – aspiringCoder 2012-04-06 19:35:21

+0

请按照我提供的链接。你可以像HTML :: TreeBuilder一样安装它,并以类似的方式使用它。 – 2012-04-06 19:40:11

+0

好的,我确实看到这是做什么,但我需要在父标签中查找,但停止访问子例如tr可以有一个标签内部id调用小? – aspiringCoder 2012-04-06 19:46:14

1

访问文本节点会变得更加容易如果您在树上调用objectify_text方法。这将文本节点从简单字符串更改为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;