2011-06-22 12 views
4

Mechanizeを使用して特定のdiv内のすべてのリンクを見つける方法はありますか?Perl Mechanize Div内のすべてのリンクを見つける

find_all_linksを使用しようとしましたが、これを解決する方法が見つかりませんでした。例えば 、

<div class="sometag"> 
<ul class"tags"> 
<li><a href="/a.html">A</a></li> 
<li><a href="/b.html">B</a></li> 
</ul> 
</div> 
+1

find_all_linksへのあなたのパラメータは何ですか? – dwerner

答えて

7

HTMLファイルの有用な情報を取得するのに便利なツールはHTML::Grabberです。これは、HTMLの要素を参照するための構文のjQueryスタイルを使用するので、次のようなことがあります:

use HTML::Grabber; 

# Your mechanize stuff here ... 

my $dom = HTML::Grabber->new(html => $mech->content); 

my @links; 
$dom->find('div.sometag a')->each(sub { 
    push @links, $_->attr('href'); 
}); 
1

のWeb ::スクレーパーをこするのに便利です。

use strict; 
use warnings; 
use WWW::Mechanize; 
use Web::Scraper; 

my $mech = WWW::Mechanize->new; 
$mech->env_proxy; 
# If you want to login, do it with mechanize. 

my $staff = scrape { process 'div.sometag li.tags a', 'links[]' => '@href' }; 
# pass mechanize to scraper as useragent. 
$staff->user_agent($mech); 

my $res = $staff->scrape(URI->new("http://example.com/")); 
for my $link (@{$res->{links}}) { 
    warn $link; 
} 

申し訳ありませんが、私はこのコードをテストしませんでした。

関連する問題