サウス動画を取ってくるpart2
前回は失敗に終わったが、今回サウスパークの動画を取ってくることに成功した。
前回と違う点として今回はWWW::MechanizeとWeb::Scraperを使っている。
use WWW::Mechanize; use Web::Scraper; use Encode; open(my $out, ">" , "south2.html")or die("could not open file."); my $agent = WWW::Mechanize->new; $agent->get('http://himado.in/?sort=today_view_cnt&keyword=サウスパーク'); for (0..10) { my $scraper = scraper { process '.thumbtitle a', 'href[]' => '@href'; process '.thumbtitle a', 'title[]' => '@title'; }; my $res = $scraper->scrape($agent->content); for (0..30) { my $link = shift @{ $res->{href} }; my $title = shift @{ $res->{title} }; next unless (defined $link); print $out encode_utf8(qq(<a href="$link">$title</a>\n)); } $agent->follow_link( text_regex => qr/>/, n => 2, ); } close($out);
Web::Scraper にある URL の正規化機能を生かすには、scrape() の第二引数で渡せばよいので、mech からの場合は以下のようにすると良いです。
# mech から HTMLを渡してスクレイプさせる my $res = $scraper->scrape($mech->content);