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

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

Любая помощь в моем коде выше была бы оценена.

Теги:

1 ответ

1
Лучший ответ

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

Всегда use strict use warnings и 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";
}
  • 0
    Спасибо, Бородин. В моей попытке расшифровать код я забыл модули, а также использовал строгие предупреждения и предупреждения. Они есть в моем собственном коде :). Я получаю ссылку на хеш элемента данных, как эта, для каждой ячейки с этим кодом, хотя HTML :: ElementTable :: DataElement = HASH (0x3b91ff8). Любая идея, как обойти это.
  • 0
    @MicrobicTiger: вы удалили tree из HTML::TableExtract ? Как я уже сказал, вам здесь это не нужно, и это только усложняет код. Вы также, кажется, пропускаете объявление для $te , или, по крайней мере, оно не там, где должно быть. Вы должны поместить его туда, где он был впервые использован, как и в моем собственном коде.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню