#!/usr/bin/perl
use LWP::UserAgent;
use HTML::DOM;
use Digest::MD5 qw(md5_hex);
use Path::Class qw(file);
my $ua = LWP::UserAgent->new;
my $referer = "http://example.com/";
my $url = "http://example.com/";
my $req = new HTTP::Request('GET', $url);
my $res = $ua->request($req);
my $dom_tree = new HTML::DOM;
$dom_tree->write($res->content);
@img = $dom_tree->getElementsByTagName("img");
my $ua2 = LWP::UserAgent->new;
foreach (@img) {
my $filename = Digest::MD5::md5_hex($_->src);
my $filepath = file('./temp', $filename);
unless(-f $filepath->stringify . ".jpg" ) {
$ua2->get( $_->src, ":content_file" => $filepath->stringify . ".jpg", "referer" => $referer);
}
}
LWP::UserAgent は HTTPのリクエストやレスポンスを行うためのモジュールです。
Webページを取得して、それをDOMツリーにして、img要素のsrc属性に記述してある画像ファイルを保存するスクリプトです。
ちょっとはまったのが、はじめに HTML::DOM ではなく、XML::DOM をつかってしまったこと。
もちろん閉じタグがない要素があるので、パースエラーになってしまうのですが、エラーになかなか気づきませんでした。(ちゃんとエラーメッセージ見ろ!って思うけど)
後は、referer を設定しないと アクセスが拒否されるかもしれません。
0 件のコメント:
コメントを投稿