Я старый новичок в Perl, и я пытаюсь создать подпрограмму в Perl, используя HTML :: TokeParser и URI.
Мне нужно извлечь ВСЕ действительные ссылки, заключенные в div, который называется "zone-extract"
Это мой код:
#More perl above here... use strict and other subs
use HTML::TokeParser;
use URI;
sub extract_links_from_response {
my $response = $_[0];
my $base = URI->new( $response->base )->canonical;
# "canonical" returns it in the one "official" tidy form
my $stream = HTML::TokeParser->new( $response->content_ref );
my $page_url = URI->new( $response->request->uri );
print "Extracting links from: $page_url\n";
my($tag, $link_url);
while ( my $div = $stream->get_tag('div') ) {
my $id = $div->get_attr('id');
next unless defined($id) and $id eq 'zone-extract';
while( $tag = $stream->get_tag('a') ) {
next unless defined($link_url = $tag->[1]{'href'});
next if $link_url =~ m/\s/; # If it's got whitespace, it's a bad URL.
next unless length $link_url; # sanity check!
$link_url = URI->new_abs($link_url, $base)->canonical;
next unless $link_url->scheme eq 'http'; # sanity
$link_url->fragment(undef); # chop off any "#foo" part
print $link_url unless $link_url->eq($page_url); # Don't note links to itself!
}
}
return;
}
Как видите, я2 цикла, сначала используя get_tag 'div', а затем ищем id = 'zone-extract'.Второй цикл просматривает этот div и извлекает все ссылки (или это было моим намерением) ...
Внутренний цикл работает, он извлекает все ссылки, правильно работая автономно, но я думаю, что есть некоторые проблемыв первом цикле, в поисках нужного мне div 'zone-extract' ... Я использую этот пост в качестве ссылки: Как мне найти содержимое div, используя HTML-модули Perl, еслиЯ знаю тег внутри него?
Но на данный момент у меня есть только эта ошибка:
Can't call method "get_attr" on unblessed reference
Некоторые идеи?Помогите!Мой HTML (Примечание URL_TO_EXTRACT_1 & 2):
<more html above here>
<div class="span-48 last">
<div class="span-37">
<div id="zone-extract" class="...">
<h2 class="genres"><img alt="extracting" class="png"></h2>
<li><a title="Extr 2" href="**URL_TO_EXTRACT_1**">2</a></li>
<li><a title="Con 1" class="sel" href="**URL_TO_EXTRACT_2**">1</a></li>
<li class="first">Pàg</li>
</div>
</div>
</div>
<more stuff from here>