胸キュンなPerlコードを下心でスパイシーにしてみた。
こんばんは、Perl48です。
自分がPerlのブログを書き始めるようになってから、
他の方のPerlブログもよく読むようになりました。
書店のWEBプログラミングコーナーなんかに行くと、
RubyやらPHPやらAJAXやらの解説本がドーンと並んでいて、
Perlだけなんだか今だに「Perl/CGI」みたいなくくりでカテゴライズされていて、
Perl推しの私としても
「うーん、Perlは枯れた技術なのかなぁ・・・」
なんて自信を無くしてしまいそうになります。
が、
そんな時、まだホットなPerlプログラマーのブログを読むと「まだまだPerlも捨てたもんじゃないぜ!」なんて元気と知識をいただいたりします。
数あるPerlブログの中で良質なだけでなく、実用的でかつエントリータイトルにマーケティング的なセンスも感じたエントリーがありました。
です。
Web::Scraperモジュールはインストール済みなので、早速コードを拝借して動かしてみる。
フォルダに次々とダウンロードされていく画像を見て、肌で強烈にIT革命(死語)を感じました。
で、動かし方がわかると自分のニーズに合わせてカスタマイズしてみたくなるのがPerl48の性でして、試しにやってみました。
やりたいことは、
【複数のURLを一気に指定して、各URLに存在するjpgファイルを根こそぎダウンロードする。】
ということです。欲しいjpgファイルの内容については内緒です(笑)
#! /usr/bin/perl use strict; use warnings; use Web::Scraper; use URI; use LWP::Simple qw/mirror/; use File::Basename qw/basename/; open (ELO, "./elo.txt"); while (<ELO>){ # URLリストを読み込む my $url = URI->new($_); # 基本的には、おいちゃんさんのコードを踏襲します my $scraper = scraper { process 'a[href=~/\.jpe?g$/]', 'urls[]' => '@href'; # result でキー名を指定しておくと、ハッシュではなくそのものが返ってくる result 'urls'; }; # リファレンスには _ref サフィックスを付けておきます my $results_ref = $scraper->scrape($url); foreach my $link (@{$results_ref}) { my $filename = basename($link); # あらかじめ「Elo」フォルダを作っておく mirror($link, './Elo/' .$filename); # サーバに負荷をかけすぎないように sleep 1; }; }; print "ダウンロードが完了しました\n";
ご覧の通り、
『複数のURLを一気に指定』という部分を
テキストファイルに1行ごとにURLを貼り付けておき、
そのテキストファイル(本プログラムでは'elo.txt')を
読み込むという形で実装。
他は、彼女からは、おいちゃんと呼ばれてるさんのソースを
拝借しています。
フォルダにエロ画像が溜まっていく様子を見て悦に入るのですが、
実際の所、全部見るのめちゃ大変(汗)
下心というエンジンで動かしたPerlスクリプトだったけど
最後の最後に「人間とコンピューターの違い」みたいなのを感じてしまいました。
画像1万枚あっても、見て高まるのはパソコンには任せられないもんなー。
あー、Perlって最高!!