あっという間の十年ブログ【Ruby篇】

"詮ずるところ#{プログラミング}は、ただ年月長く倦まずおこたらずして、はげみつとむるぞ肝要にて、学びやうは、いかやうにてもよかるべく、さのみかかはるまじきことなり。いかほど学びかたよくても、おこたりてつとめざれば、功はなし。また、人々の才と不才とによりて、その功いたく異なれども、才不才は、生まれつきたることなれば、力に及びがたし。されど、大抵は、不才なる人といへども、おこたらずつとめだにすれば、それだけの功は有る物なり。" - 本居宣長

サウス動画を取ってくる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);

今日のCPANモジュール

Web::Scraper にある URL の正規化機能を生かすには、scrape() の第二引数で渡せばよいので、mech からの場合は以下のようにすると良いです。

# mech から HTMLを渡してスクレイプさせる
my $res = $scraper->scrape($mech->content);

結果