Perl はじめてみた #perl

いまさら Perl

最近、少しずつperlを勉強しています。
なぜPerlなのか。一言で言えば、面白い言語だからです。
Perlはライブラリが充実しているので、「手軽で簡単」にサービスが作れるのが特徴です。また、ライブラリ群は、CPANというモジュールを用いて手軽にインストールして扱えます。「CPANこそ言語なのだ」なんていうくらい、モダンなPerlでは、使われいます。他にもPerlを学ぶ理由は、ありますが、単純に「楽しく学べ、幅が広い言語」だからです。

スクレイピングの練習

今回は、「自動画像ダウンロード」を書いてみました。
教材にさせていただいたサイトは下記です。

サンプルコード

#!/usr/bin/perl

use strict;
use warnings;
use Web::Scraper;
use URI ();
use LWP::Simple qw(mirror);
use File::Basename qw(basename);

my $uri = URI->new("http://chitekizaisan.blog28.fc2.com/blog-entry-3544.html");
my $scraper = scraper {
    process 'a[href]', 'urls[]' => '@href';
    result 'urls';
};
my $result = $scraper->scrape($uri);

foreach my $link (@{$result}) {
    if ($link =~ /\.jpe?g$/) {
        my $filename = basename($link);
        mirror($link, './pic/'.$filename);
        sleep 1;
    }
}
print "ダウンロード完了\n";
__END__

少しだけ解説

◆File::Basename
サブルーチン basename は、引数で渡されるファイルパスからファイル名を取り出す。
◆LWP::Simple
サブルーチン mirror は、If-Modified-Since(更新時間) と Content-Length ヘッダ(コンテンツ)に内容に変化があるかを調べ、変化があれば新しく保存されます。
Web::Scraper
次の記事がわかりやすいです。

実行結果