HTML::TableExtract не работает

Входной HTML- файл прикреплен (мой файл $), с помощью следующего сценария я не могу извлечь таблицу, которую я хочу. Какие-либо предложения?

use strict;
use warnings;
use HTML::TableExtract;

my $file="view-source_www.nasdaq.com_dividend-stocks_dividend-calendar.aspx_date=2017-Apr-19.html";
open DATA,$file || die "cannot";

my $content;
{
    local $/ = undef; # slurp mode
    $content = <DATA>;
}
close DATA;

my $te;
$te = HTML::TableExtract->new( headers => [qw(Announcement_Date)] );
$te-> parse($content);

# Examine all matching tables
foreach my $ts ($te->tables) {
  print "Table (", join(',', $ts->coords), "):\n";
  foreach my $row ($ts->rows) {
     print join(',', @$row), "\n";
  }
}

1 ответ

Здесь две проблемы.

Во-первых, как jcaron в комментарии, вы не разбираете правильную вещь. Вы, кажется, анализируете страницу "просмотра источника". Вам нужно получить HTML напрямую. Вы можете сделать это с помощью LWP:: Simple.

use LWP::Simple;

my $url = 'http://www.nasdaq.com/dividend-stocks/dividend-calendar.aspx?date=2017-Apr-19';

my $content = get $url;

Запуск вашего кода теперь не дает ошибок, но, к сожалению, он также не дает никакого вывода. Это потому, что вы определяете headers Аргумент к конструктору объекта неверен. Ты используешь qw(Announcement_Date) но заголовок таблицы со значением Announcement_Date отсутствует, поэтому соответствующая таблица не найдена.

Если вы измените вызов конструктора на это:

$te = HTML::TableExtract->new( headers => ['Announcement Date'] );

Тогда вы получите ожидаемый результат.

Другие вопросы по тегам