2011-07-01 7 views
0

私はHTMLのテーブルからリンクを取得しようとしています。 HTML::TableExtractを使用すると、テーブルを解析してテキストを取得できます(例:Ability、Abnormal in below)が、テーブルに含まれるリンクを取得できません。たとえば、PerlはHTMLテーブルのリンクを解析します

<table id="AlphabetTable"> 
    <tr>  
    <td> 
    <a href="/cate/A/Ability">Ability</a> <span class="count">2650</span> 
    </td> 
    <td> 
    <a href="/cate/A/Abnormal">Abnormal</a> <span class="count">26</span> 
    </td> 
</table> 

HTML :: TableExtractを使用してリンクを取得する方法はありますか?またはこのような状況で使用する可能性がある他のモジュール。私のコードのおかげで

一部:

$mech->get($link->url()); 
$te->parse($mech->content); 

foreach $ts ($te->tables){ 
    foreach $row ($ts->rows){ 
     print @$row[0];  #it only prints text part 
          #but I want its link 
    } 
} 

答えて

5

HTML::LinkExtor、その解析方法に抽出されたテーブルのテキストを渡します。

my $le = HTML::LinkExtor->new(); 

foreach $ts ($te->tables){ 
    foreach $row ($ts->rows){ 
     $le->parse($row->[0]); 
     for my $link_tag ($le->links) { 
      my ($tag, %links) = @$link_tag; 
      # next if $tag ne 'a'; # exclude other kinds of links? 
      print for values %links; 
     } 
    } 
} 
+0

あなたは、私が言及した例を挙げてもう少し具体的に教えてくださいできますか? – REALFREE

+0

あなたのコードを変更するのは簡単ですが、それを表示していませんでした... – ysth

+0

私は部分コードを更新しました:) – REALFREE

3

コンストラクタではkeep_htmlオプションを使用してください。

keep_html

戻るというだけで目に見えるテキストよりも、セルに含まれる生のHTML。埋め込みテーブルは、セルから抽出されたHTMLには保持されません。このオプションが有効な場合、ヘッダー一致のパターンは文字列内のHTMLを考慮する必要があります。このオプションは、要素ツリー構造に抽出すると効果がありません。

$te = HTML::TableExtract->new(keep_html => 1, headers => [qw(field1 ... fieldN)]); 
関連する問題