naoyaのはてなダイアリー - Web::Scraperを見て。
これはよさそう。ソース読んでみると単純に値を取得する以外にも、どうやら、配列で結果を受け取ったり、サブルーチンを渡して処理を委譲したりできるようなので、ためしにやってみよう。
use strict; use warnings; use Web::Scraper; use URI; use YAML; use Encode; my %result; sub parse_title { my $node = shift; my $text = $node->as_text; my $left = decode_utf8('『'); my $right = decode_utf8('』'); my ($nth, $title, $date) = $text =~ m/^\[(.*?)\]\s+$left(.*?)$right(.*)$/xms; @result{qw(nth title date)} = ($nth, $title, $date); } my $onsen = scraper { process 'div[class="left_01"] > h3', \&parse_title; process 'div[class="radiotext"] > p', comment => 'TEXT'; process 'div[class="radiolink"] > a', 'link[]' => '@href'; result 'title', 'comment', 'link'; }->scrape(URI->new("http://lantis-net.com/rakisuta/")); $result{comment} = $onsen->{comment}; $result{link} = $onsen->{link}; say YAML::Dump (\%result);
実行結果はこつら。
$ perl scraper.pl --- comment: 右といえば左!白といえば黒!天の邪鬼なあきらさん。テーマ曲が変わりました♪なんだかウキ ウキしてきちゃう☆白石さん、みんなに伝わるのかな?白石さんが饒舌に語り始めるのをBGMにあきらさん はモグモグと。切羽詰った状況はドラマを生み出すのかもしれません。 date: 2007年05月04日配信 link: - http://lantis-net.com/rakisuta/002.smi - http://lantis-net.com/rakisuta/002.asx nth: 第17回 title: なに食ってるんすか?
これは便利だわー。必要に応じてSelectorで取り出すだけじゃなく、サブルーチン渡すことでSelectorで取りきれないところを正規表現に任せたりできる。あと、id:naoyaさんも言ってるように、実装がすごい短くてかっこいいぜ。
Web::Scraper++