ラベル

Mac (7) MacOSX (3) Windows (3) iPhone (3) Android (2) Eclipse (2) bash (2) ゲーム (2) マンガ・アニメ (2) CUPS-PDF (1) Dev (1) Java (1) Mountain Lion (1) PBTweet+ (1) Perl (1) SnowLeopard (1) Twitter (1) Web::Scraper (1) Workflow (1) automate (1) eeePC (1) extension (1) git (1) iOS (1) javascript (1) notification (1) script (1) サーバ (1) 山梨県 (1) 教採 (1) 試験 (1)

2011年9月29日木曜日

Web::Scraper を使って日本全国のAED設置場所をぶっこぬく

下記のサイトから都道府県ごとの検索結果が表示される。
AED設置場所検索
http://www.qqzaidan.jp/AED/aed.htm

Web::Mechanize を使って、上記ページから全都道府県の設置場所を全部取るのが理想だけど、まだ勉強してないので、下記コードではとりあえず北海道の分だけをURLコピペで取得してる。
URLリストをファイルかなんかに書きこんで、qwにそのファイルを読みこませる?やり方とかあるのかなあ


#!/opt/local/bin/perl
use strict;
use warnings;

use Web::Scraper;
use URI;
use YAML;

# ↓3行の参考URL http://blog.dtpwiki.jp/dtp/2011/03/wwwmechanizeweb.html
use Encode::Alias;
define_alias(qr/shift.*jis$/i => '"cp932"');
define_alias(qr/sjis$/i       => '"cp932"');

binmode STDOUT,":encoding(utf8)";

# === Main part ===
my @uri = qw(
    http://www.qqzaidan.jp/cgi-bin/database.cgi?equal2=%96k%8AC%93%B9
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%341321%3799%200
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%360962%3999%400
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%1116835%11933%600
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%1872014%19612%800
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%2638458%27466%1000
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%3749798%38534%1200
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%4526158%45038%1400
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%5002340%49644%1600
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%5329517%52688%1800
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%5703067%55888%2000
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%6346149%62038%2200
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%7165942%69977%2400
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%8457982%82658%2600
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%8651796%84551%2800
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%8995287%87923%3000
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%9409535%91783%3200
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%10158149%99094%3400
    http://www.qqzaidan.jp/cgi-bin/database.cgi?
equal2=%96k%8aC%93%b9&data=3636%109894%11126620%108396%3600
);
    
# Web::Scraper のインスタンスを作成
my $items = scraper {
    process '//center' , 'resultcenter[]' => scraper {
        process '//table' , 'resulttable[]' => scraper{
            process '//tbody' , 'resulttbody[]' => scraper {
                process '//tr[2]' , 'resulttr[]' => scraper {
                    process '//td[1]' , 'resulttd1[]' => 'TEXT';
                    process '//td[2]' , 'resulttd2[]' => 'TEXT';
                    process '//td[3]' , 'resulttd3[]' => 'TEXT';
                    process '//td[4]' , 'resulttd4[]' => 'TEXT';
                    process '//td[5]' , 'resulttd5[]' => 'TEXT';
                };
            };
        };
    };
};

my $out_file="AED_hokkaidoh.txt";
open(my $out_fh,">>",$out_file)||die('ファイルを追記モードで開けませんでした。'); 

my $result;

for(my $count = 0; $count < @uri; $count++){
    eval {$result = $items->scrape(URI->new($uri[$count]))};

    #例外処理
    if($@) {
        print "exception! $@\n";
    }

    #情報の表示
    print $out_fh Dump($result); #Dump にはメモリアドレスを渡すらしい(^^;
}


close($out_fh);

0 件のコメント:

コメントを投稿