2014-02-24 4 views
0

Я хочу разбора HTML page.Extract на значок, описание и тип значка с помощью разбора HTML с HTML :: TreeBuilder

 <div class="row"> 
     <div class="span8"> 
     <table id="badge-list"> 
      <tr> 
      <td style="width: 25px;"></td> 
      <td style="width: 200px;" class="badge-cell"> 
       <a class="badge-name" href="/badge/show/3/"> 
        <span class="badge-icon bronze">&#8226;</span> 
        Editor 
       </a> 
       <span class="multiplier">x 3892</span></td> 
       <td class="earned False">&nbsp;</td> 
       <td>First edit</td> 
      </tr> 

мой Perl-код следует,

я пытаясь извлечь a class="badge-name" и другие детали, используя приведенный ниже код

 my $tree = HTML::TreeBuilder->new(); 
     $tree->parse($content); 
     my ($h1) = $tree->look_down('_tag', 'table', 'id', 'badge-list'); 
     my @tr = $h1->look_down('_tag', 'tr') ; 

     foreach my $tr (@tr) { 
     my @tdList = $tr->look_down('_tag','td'); 

     foreach my $td (@tdList) { 
      if (my $a = $td->look_down('_tag','a')) { 
       print $a->as_text , "\n"; 
       my $span = $a->look_down('_tag','span', 'class'); 
       print $span->attr('class'); 
      } 
      else { 
       my $text = $td->as_text , "\n";  
       print "$text\n"; 
      } 
     } 

    } 

Этот код бросает предупреждение Wide character in print at ..

+0

Чтобы показать ошибка будет полезна здесь, но, возможно, вместо $ a-> look_down ('_ тег', 'интервал', 'класс') использовать $ a-> look_down ('_ тег', 'интервал') -> {class} – albe

+1

Что означает * «нарушение» * означает? – Borodin

+0

'my $ span = $ a-> look_down ('_ tag', 'span', sub {defined $ _ [0] -> attr ('class')});' будет гарантировать, что класс должен быть определен. – Chris

ответ

1

look_downпары параметров атрибута/значения.

$a->look_down('_tag','span', 'class') 

должен быть только

$a->look_down('_tag','span') 
0

Я хотел бы предложить, чтобы добавить "использовать utf8;" в начале скрипта, чтобы добавить символы поддержки без символов ASCII в печать. Символ • является пространственно широким.

use utf8; 
Смежные вопросы