Использование Web :: Scraper - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь разобрать некоторые html-теги, используя Perl-модуль Web :: Scraper, но кажется, что я неумелый, используя perl . Интересно, может ли кто-нибудь искать ошибки в моем коде ...:

Это мой HTML для анализа (2 URL внутри li тэгов):

<more html above here>
<div class="span-48 last">
<div class="span-37">
  <div id="zone-extract" class="123">
      <h2 class="genres"></h2>  
                <li><a href="**URL_TO_EXTRACT_1**">1</a></li>
                <li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li>
        <li class="first">Pàg</li>
  </div>
</div>      
</div>
<more stuff from here>

Я пытаюсь получить:

ID: 1 Ссылка: URL_TO_EXTRACT_1

ID: 2 Ссылка: URL_TO_EXTRACT_2

С этим кодом Perl:

my $scraper = scraper {
    process ".zone-extract > a[href]", urls => '@href', id => 'TEXT';
    result 'urls';
};
my $links = $scraper->scrape($response);

Это одна из бесконечных комбинаций процесса , которые я пробовал, с двумя разными результатами: пустой возврат или все URL внутри кода (а мне нужны только ссылки внутри zone-extract).

Решено с помощью мобов ... # zone-extract вместо .zone-extract:)

1 Ответ

2 голосов
/ 07 ноября 2012
#!/usr/bin/env perl 
use strict;
use warnings;

use Web::Scraper;

my $html = q[
<div class="span-48 last">
<div class="span-37">
<div id="zone-extract" class="123">
<h2 class="genres"></h2>  
<li><a href="**URL_TO_EXTRACT_1**">1</a></li>
<li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li>
<li class="first">Pàg</li>
</div>
</div>      
</div>
];      # / (turn off wrong syntax highlighting)

my $parser = scraper {
    process '//div[@id="zone-extract"]//a', 'urls[]' => sub {
        my $url =  $_[0]->attr('href') ;
        return $url;
    };

};

my $ref = $parser->scrape(\$html);

print "$_\n" for @{ $ref->{urls} };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...