【问题标题】:Perl parse links from HTML TablePerl 从 HTML 表中解析链接
【发布时间】:2011-07-01 04:51:20
【问题描述】:

我正在尝试从 HTML 表格中获取链接。通过使用HTML::TableExtract,我可以解析表格并获取文本(即下例中的能力、异常),但无法获取表格中涉及的链接。例如,

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

【问题讨论】:

    标签: html perl parsing


    【解决方案1】:

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

    【讨论】:

    • 你能用我提到的例子更具体地告诉我吗?
    • 你真的只想要每行的第一个 td 吗?
    【解决方案2】:

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

    keep_html

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2011-03-28
      • 2010-12-24
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多