输入html已连接(我的$ 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";
}
}
这里有两个问题。
首先,正如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)
,但没有具有" aubion_date"值的表标头,因此找不到匹配表。
如果您更改了构造函数,请致电:
$te = HTML::TableExtract->new( headers => ['Announcement Date'] );
然后您将获得预期的输出。