スクレイピングで取得してきたデータは保存します。
ただ単に保存するだけでなく、何かしら整理して保存した方が後から参照しやすくなります。
例えば、複数のサイトから毎日画像データを取得する場合、
取得してきた画像を「サイト毎」「日付毎」に保存した方が良いと思います。
自分の場合は、「サイト毎」「日付毎」をディレクトリ階層にしています。
例えば「hogehoge.com」というサイトから「2010年8月29日」に画像を取得した場合は、
「data/hogehoge/20100829」というディレクトリを作成して、そのディレクトリに画像を保存していきます。
こういったことを行なう場合には、perlでディレクトリ操作を行なう必要が出てきます。
ディレクトリ操作を行なうモジュールがありますので、それを使用します。
下記のような感じで使用しています。
#!/usr/bin/env perl use strict; use warnings; use utf8; use FindBin; use Time::Piece; use File::Path qw/mkpath/; use File::Spec; # データを保存するディレクトリ my $save_dir = File::Spec->catfile($FindBin::Bin,'data'); # サイトのリスト my @site_list = qw/hogehoge fugafuga/; # ディレクトリ作成のために日付を取得 my $t = Time::Piece::localtime(); my $today = $t->ymd(''); for my $site (@site_list) { # サイト毎 日付毎のディレクトリパスを作成 my $dir = File::Spec->catfile($save_dir, $site, $today); # ディレクトリがなければ、作成する unless (-e $dir) { mkpath $dir; } # スクレイピング my ($image_name, $image) = get_image($site); # 保存名 my $file_path = File::Spec->catfile($dir, $image_name); # 保存 print "Save to $file_path\n"; open my $fh, '>', $file_path or die "Can't open '$file_path: $!"; binmode($fh); print $fh $image; close($fh); }
主に使用しているモジュールと用途は次の通りです。
- FindBin
- 実行スクリプトがあるディレクトリパスの取得
- Time::Piece
- 時間関係
- File::Path
- ディレクトリの作成
- File::Spec
- ディレクトリパスの作成
各モジュールの詳細に付いてはperldocまたはperlcodesampleさんがとても参考になります。