Perl анализирует ссылки из таблицы HTML - PullRequest
0 голосов
/ 01 июля 2011

Я пытаюсь получить ссылки из таблицы в 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 ]

5 голосов
/ 01 июля 2011

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;
        }
    }
}
3 голосов
/ 01 июля 2011

Используйте параметр keep_html в конструкторе.

keep_html

Возвращает необработанный HTML-код, содержащийся в ячейке, а не только видимый текст.Встроенные таблицы не сохраняются в HTML, извлеченном из ячейки.Шаблоны для совпадений заголовков должны учитывать HTML в строке, если эта опция включена.Эта опция не действует при извлечении в древовидную структуру элемента.

$te = HTML::TableExtract->new( keep_html => 1, headers => [qw(field1 ... fieldN)]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...