http://d.hatena.ne.jp/tokuhirom/20110221/1298244438
id:tokuhirom氏の Web::Queryを使って遊んでみた。
とりあえず DMM.co.jpの動画ダウンロード販売の人気 AV女優トップ 20を取得してみた。
コード
こんな感じです。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Web::Query; binmode STDOUT, ":utf8"; my $url = 'http://www.dmm.co.jp/' . 'digital/videoa/-/ranking_all/=/type=actress/ch_navi=actress/'; wq($url) ->find('td.bd-b > a > img') ->each(sub { my ($i, $elem) = @_; printf "%d位 %s\n", $i+1, $elem->attr('alt'); });
簡潔に書けますね。私は jQueryというか JavaScript自体全然使わないの
ですが、Web::Scraperに比べるとだいぶシンプルなんじゃないかなと
思いました。
ちなみに結果は以下のような感じです。
1位 つぼみ 2位 麻美ゆま 3位 大沢美加(廣田まりこ) 4位 晶エリー(大沢佑香) 5位 成瀬心美(ここみ) 6位 吉沢明歩 7位 ほしのあすか 8位 佐山愛 9位 Rio(柚木ティナ) 10位 蒼井そら 11位 水城奈緒 12位 雪見紗弥 13位 堀口奈津美(恩田ほのか) 14位 小川あさ美 15位 管野しずか 16位 佳山三花 17位 希志あいの 18位 藤浦めぐ 19位 仁科百華 20位 初音みのり
Web::Scraperの場合
比較のために書いてみました。オーソドックな書き方にしています。
出力結果は同じになります。
#!/usr/bin/env perl use strict; use warnings; use utf8; use URI; use Web::Scraper; binmode STDOUT, ":utf8"; my $url = 'http://www.dmm.co.jp/' . 'digital/videoa/-/ranking_all/=/type=actress/ch_navi=actress/'; my $actress_ranking = scraper { process 'td.bd-b', 'actresses[]' => scraper { process 'a > img', 'name' => '@alt'; }; }; my $res = $actress_ranking->scrape(URI->new($url)); my $i = 1; for my $actress (@{$res->{actresses}}) { printf "%d位 %s\n", $i++, $actress->{name}; }
まとめ
Web::Queryで遊んでみました。処理が一つのところにまとまる感じが
いいかなと思いました。コールバック関数がすごく長くなって
しまうとどうかわからないですけど、数十行なら問題ないのではない
でしょうか。jQueryを全然知らないので、なんとも言えないですが、
普段慣れてるのであれば、さらっと書けてしまうんじゃないでしょうかね。
まだリリースされたばっかりで、仕様も変わるかもしれないですが、
今後が楽しみなモジュールだと思います。