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";
}