perl HTML::TableExtract вне диапазона ошибки

У меня проблемы с восстановлением данных из таблицы 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, но не смог найти его или требуемый Badger::Base с помощью PPM, а HTML::Element выглядит так, как будто он лучше используется для построения таблиц. Я также использую WWW::Mechanize ранее в сценарии.

Любая помощь в моем коде выше будет принята.

1 ответ

Решение

Вам действительно не нужен режим извлечения дерева для большинства целей.

Пожалуйста всегда use strict а также use warnings в верхней части каждой Perl-программы, которую вы пишете, и объявляйте ваши переменные как можно ближе к их первой точке использования.

Ваш звонок $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";
}
Другие вопросы по тегам