0

HTML テーブル内からデータを復元するのに苦労しています。これが私が持っているものです。

use strict; 
use warnings;
use HTML::TreeBuilder;
use HTML::TableExtract qw(tree); #
use WWW::Mechanize;

my $d = 3; 
my $c = 4; 

$te = HTML::TableExtract->new( depth => $d, count => $c ); # , decode => 1, gridmap => 1
$te->parse($mech->content);
print "\nDepth = $d, Count = $c \n\n";
my $table = $te->first_table_found;
my $table_tree = $table->tree();
my @rows = $table->rows();
print "The row count is   : ".$rowcount,"\n";
print "The column count is: ".$colcount,"\n";
foreach my $row (@rows)
{
   my @read_row = $table->tree->row($row);
   foreach my $read (@read_row)
   {
      print $read, "\n";
   }
}

これをエラーメッセージとして取得します。

"Rows(ARRAY(0x2987ef8)) out of range at test4.pl line 91."

テーブルを調べて値を取得するより良い方法はありますか。探すヘッダーがなく、 HTML::Queryを見ましたが、それが見つからなかったか、PPM とHTML::Elementを介して必要なBadger::Baseがテーブルの構築に使用されているように見えます。スクリプトの前半でWWW::Mechanizeも使用しています。

上記のコードに関するヘルプをいただければ幸いです。

4

1 に答える 1

1

ほとんどの場合、ツリー抽出モードは必要ありません。

作成するすべての Perl プログラムの先頭で常に use strict変数をuse warnings宣言し、最初に使用するポイントのできるだけ近くで変数を宣言してください。

あなたの呼び出しは、このようにアクセスできる配列参照$table->rows()のリストを返します

my $te = HTML::TableExtract->new(depth => $d, count => $c); # , decode => 1, gridmap => 1
$te->parse($mech->content);
printf "\nDepth = %d, Count = %d\n\n", $d, $c;

my $table = $te->first_table_found;
my @rows = $table->rows;

for my $row (@rows) {
  print join(', ', @$row), "\n";
}
于 2014-04-01T02:06:39.777 に答える