-1

附加了输入 html (my $file) ,使用以下脚本,我无法提取我想要的表。有什么建议么?

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

1 回答 1

2

这里有两个问题。

首先,正如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'] );

然后你得到预期的输出。

于 2017-04-17T10:22:19.880 回答