なんか Perl でスクレイピングする記事が話題になっているようでして。
-簡単!たった13行のコードでHTML取得&解析をするPerlスクリプト - DQNEO起業日記
このブログの著者の人、いいな。と思う、ほんとに。僕も素直でありたいな、と。で、ちょっと遅くなってしまいましたが、便乗してみます。
**本日の教材
ただ、短く○○行で書くとかは得意分野ではないので、おたのしみ画像を手に入れる方向にもっていってみました。次のサイトを教材に。
-なんでもちゃんねる : 胸がきゅんとする女の子の画像 - ライブドアブログ
好みが合わなければ、サンプルコードの URL のところだけ変えてもらっても構いませんし。
**サンプルコード 下記のコードで胸キュン画像を GET できます。
|perl|
! /usr/bin/perl
use strict; use warnings;
use Web::Scraper; use URI; use LWP::Simple qw/mirror/; use File::Basename qw/basename/;
なんでもちゃんねる : 胸がきゅんとする女の子の画像 - ライブドアブログ
my $url = URI->new('http://blog.livedoor.jp/taison1224/archives/1369203.html');
全リンクを取得してから後で必要な分を抜き出すよりも、
はじめから必要なリンクだけ取得するほうがスマートではないかと
my $scraper = scraper { process 'a[href=~/.jpe?g$/]', 'urls[]' => '@href';
# result でキー名を指定しておくと、ハッシュではなくそのものが返ってくる
result 'urls';
};
リファレンスには _ref サフィックスを付けておいたほうが良いと
オライリー『Perl ベストプラクティス』にも書いていたし
my $results_ref = $scraper->scrape($url);
foreach my $link (@{$results_ref}) { my $filename = basename($link);
# あらかじめ「MuneKyun」フォルダを作っておく
mirror($link, './MuneKyun/' .$filename);
# サーバに負荷をかけすぎないように
sleep 1;
};
print "ダウンロードが完了しました\n"; ||<
**解説
Web::Scraper の解説については、次の記事がわかりやすいかと思います。
-use Web::Scraper; - 今日のCPANモジュール
1点だけ自前で解説を加えるとしたら、ここ(↓)のところ。
|perl| my $scraper = scraper { process 'a[href=~/.jpe?g$/]', 'urls' => '@href'; result 'urls'; }; ||<
これを、下記のように全リンクを取得してから条件分岐するよりも、はじめから必要なリンクだけ取得しておけばよいのではないか、と。
|perl| my $scraper = scraper { process 'a', 'urls' => '@href'; result 'urls'; };
my $results_ref = $scraper->scrape($url);
foreach my $link (@{$results_ref}) { if ($link=~/.jpe?g$/) { my $filename = basename($link); mirror($link, './Pictures/100610MuneKyun/' .$filename); sleep 1; } }; ||<
あと、コードレイアウトや変数名等については、オライリーの『Perl ベストプラクティス』にしたがってみました。

- 作者: Damian Conway,クイープ
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/08/24
- メディア: 大型本
- 購入: 11人 クリック: 153回
- この商品を含むブログ (155件) を見る
**おわりに サンプルコードをご覧になって分かるように、短いスクレイピングのコードでも、その中にループやら正規表現やらリファレンスやら様々な要素が入っています。
分からないところを調べながら、サンプルコードを自分なりにアレンジしていったら、そーとー勉強になるはず。と思って紹介してみました。サーバに負荷をかけすぎないよう気をつけつつ、いろいろと試してみてください。
ではでは。
**参考書籍

Spidering hacks―ウェブ情報ラクラク取得テクニック101選
- 作者: Kevin Hemenway,Tara Calishain,村上雅章
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2004/05
- メディア: 単行本
- 購入: 52人 クリック: 904回
- この商品を含むブログ (104件) を見る
**参考サイト そもそも Web::Scraper の位置づけがわからないっていうか、LWP やら HTML::TreeBuilder やら、どこがどう繋がっているんじゃい!って方には次のサイトがオススメです。系譜図がわかりやすくて感動した。
**このエントリーのつづき
-下心で覚えるエッチな Perl - 若妻サイト「舞ワイフ」をスクレイピングしてみた
**関連エントリー
実は、前にも同じようなエントリーを書きました。画像だけを較べたら、個人的にはこっち(↓)のほうが好きかなと。
-とんでもない美少女ソムリエが現れたので、Web::Scraper で萌え画像をぶっこ抜いてみる