2017-04-17 28 views
-1

輸入html是attached (my $file),使用以下腳本,我無法提取我想要的表。有什麼建議麼?HTML :: TableExtract不起作用

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

您的文件實際上是一個HTML頁面,其中包含另一個頁面的(轉義)源。您可能需要原始的HTML,而不是它的編碼版本。 – jcaron

+0

[HTML :: TableExtract很美](https://www.nu42.com/2012/04/htmltableextract-is-beautiful.html)...「不起作用」沒有幫助。 –

回答

2

這裏有兩個問題。

首先,由於jcaron指出in a comment,你不解析正確的東西。您似乎在解析「查看源代碼」頁面。你需要直接獲取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']); 

然後你得到預期的輸出。