0

HTMLテーブルにアクセスするための次のコードがあります。

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

ただし、Webページはテーブルの境界線を使用して特定のテキストを分割しているため、テキストはフォーマットされずに表示されます。ですから、次のセルでは、ジョーダンズタウンを想定した「ジョーダンズタウンを計算するための数学」のようなものが登場します。これが私が使用しているコードです、

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();

と配列を使用してテキストを分離しようとしましたが、うまくいきませんでしたか?任意のポインタ。ありがとう

4

2 に答える 2

1

ツリーでメソッドを呼び出すと、HTMLツリーのテキストノードへのアクセスがはるかに簡単になり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;
于 2012-04-06T23:49:17.940 に答える
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());   
}
于 2012-04-06T19:32:42.157 に答える