2012年10月18日木曜日

Download all Images in a URL 指定ページにあるすべての画像を自動的にダウンロード


 調子に乗って、指定ウェブアドレスのページを自動的にダウンロードの応用として、指定のページにあるすべての画像を自動的にダウンロードするプログラムを書いて見ました。
 パラメータはファイル名で、内容は一行に一URLです。
 この例では、jpgしか見ていませんが、pngやgifなどほしいフォーマットを追加すれば良いです。画像に限らず、PDFやDOCなどもっと広げることもできます。
 個々の課題については、調べるとくどい説明と分かりにくい例が一杯あり、読むだけで疲れてしまいます。よって、ここでは、タスクベース、つまり目的に応じた、独立したプログラムをまとめてみることにしました。へたくそとか、効率悪いとか言う見方もあるかもしれませんが、一応そこそこ快適に動くことは確認しました。結果オーライ!
 個々の課題の例としては、「URL文字列からファイル名だけを取り出す」や、行末の改行コードを除去する」、「ハッシュの配列の参照」、「ファイルの入出力」等等です。
 しかし、HTMLとかLWP、Fileなどのクラスってすばらしいものですね。すべて自作していたら日が暮れます。
use strict;
use HTML::LinkExtor;
use  LWP::Simple;
use File::Basename;
my $file=$ARGV[0];
my $tag;
open(IN, "$file") or die"$!";
sub getFileName{
    my $path = shift;
    my ($name, $path, $suffix) = fileparse($path, ());
    return ( $name );
}
my $out;
my $line;
while(<IN>) {
  $line = $_;
  $line =~ s/\n//;
  my $parser = HTML::LinkExtor->new(undef, $line);
  $parser->parse(get($line))->eof;
  @links = $parser->links;
  foreach $linkarray (@links) {
    my ($elt_type, %attrs) = @$linkarray;
    if (($elt_type eq 'img' || $elt_type eq 'IMG') && $attrs{'src'} =~ /\.jpg$/i) {
      $out = getFileName($attrs{'src'});
      getstore($attrs{'src'}, $out);
    }
  }
}

0 件のコメント:

コメントを投稿