Perl解析HTML表中的链接

时间:2011-07-01 04:51:20

标签: html perl parsing

我正在尝试从HTML中获取表格中的链接。通过使用HTML::TableExtract,我能够解析表并获取文本(即下面的例子中的Ability,Abnormal),但是无法获得表中涉及的链接。例如,

<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 
   }
}

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:3)

在构造函数中使用keep_html选项。

  

<强> keep_html

     

返回单元格中包含的原始HTML,而不仅仅是可见文本。嵌入式表格不会保留在从单元格中提取的HTML中。如果启用此选项,则标题匹配的模式必须考虑字符串中的HTML。如果提取到元素树结构中,则此选项无效。

$te = HTML::TableExtract->new( keep_html => 1, headers => [qw(field1 ... fieldN)]);