M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2010年10月27日 00:39

Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(9)

このエントリーをはてなブックマークに追加 mixiチェック

アドビのCS4対応プリントショップのリストのページから、Google Mapsに表示させるやつの9回目。

前回は、HTMLからスクレイピングした内容をうまく置換して、住所とTELとFAXが混ざった文字列からそれぞれを切り出そうと試みましたが、失敗。そして、いつの間にか元のAdobe Creative Suite 出力対応店一覧がCS5対応になってしまっていたので、対応しなければ行けないなーて言うところまでやりました。

今回は、Adobe Creative Suite 出力対応店一覧を改めてサイトから取得し直して、そのHTMLから、整理したデータが取れるように書き換えてしまいます。


さて、いままで、アドビシステムズさんのサーバに負荷をかけないように、ローカルにHTMLを取得して、それをWeb::Scraperで解析していたのですが、アドビシステムズさんのページがかってにCS5対応のリストに変わってしまっていましたので、これを取得し直します。

Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(5)

と同じように、wgetで持ってくればいいので、こんな感じで。

$ rm printshop.html
$ wget http://www.adobe.com/jp/print/printshop/ -O printshop.html

あと、今回取得したHTMLに対応したスクリプトを書きます。

Filename: test9.pl

#!/usr/bin/perl
 
use strict;
use warnings;
use utf8;
use Web::Scraper;
use YAML::Syck;
use Encode;
  
open my $fh, '<', 'printshop.html';
my $html = decode_utf8(do { local $/; <$fh> });
close $fh;
  
my $s = scraper {
    process '//div[@class="tabcontent"][1]//table[@class="data-bordered max"]/tbody/tr', 'codes[]' => scraper {
        process '//td[1]', pref    => [ 'TEXT', sub { s/\s//g; } ];
        process '//td[2]', company => [ 'TEXT', sub { s/\s//g; } ];
        process '//td[3]', address => [ 'TEXT', sub { s/\s//g; s/TEL:.+$//i; return $_; } ];
        process '//td[3]', phone   => [ 'TEXT', sub { s/\s//g; if(m/TEL:([\d-]+)/i){return $1;};}];
        process '//td[3]', fax     => [ 'TEXT', sub { s/\s//g; s/:/:/g; if(m/FAX:([\d-]+)/i){return $1;};undef;}]    ;
        process '//td[4]', illustratorcs5 => [ 'TEXT',  sub { return $_ =~m|yes|i ? 1 : undef; } ];
        process '//td[5]', indesigncs5    => [ 'TEXT',  sub { return $_ =~m|yes|i ? 1 : undef; } ];
        process '//td[6]', pdfx1a         => [ 'TEXT',  sub { return $_ =~m|yes|i ? 1 : undef; } ];
        process '//td[7]', pdfx4          => [ 'TEXT',  sub { return $_ =~m|yes|i ? 1 : undef; } ];
    };
};
 
my $scraped = $s->scrape($html);
print Dump($scraped);
  
exit;
 
__END__

実行結果はこんな感じ。

--- 
codes: 
  - 
    address: 北海道札幌市西区二十四軒2条6丁目1番8号
    company: 株式会社須田製版
    fax: 011-621-1500
    illustratorcs5: 1
    indesigncs5: 1
    pdfx1a: 1
    pdfx4: 1
    phone: 011-621-1000
    pref: 北海道
  - 
    address: 北海道札幌市白石区菊水2条1丁目4-27
    company: 正文舎印刷株式会社
    fax: 011-813-2581
    illustratorcs5: 1
    indesigncs5: 1
    pdfx1a: 1
    pdfx4: ~
    phone: 011-811-7151
    pref: 北海道
  - 
  ...
  - 
    address: 東京都板橋区志村1-11-1
    company: 凸版印刷株式会社情報・出版事業部
    fax: ~
    illustratorcs5: 1
    indesigncs5: 1
    pdfx1a: 1
    pdfx4: ~
    phone: 03-3968-5111
    pref: 東京都
  - 
    address: 東京都文京区小石川4-14-12
    company: 共同印刷株式会社
    fax: ~
    illustratorcs5: 1
    indesigncs5: 1
    pdfx1a: 1
    pdfx4: ~
    phone: 03-3817-2111
    pref: 東京都
  - 
  ...
  

FAXが無い会社は、undefを代入するようにフィルタ内でif文使って分岐してみました。

今回やってみてわかったんですが、アドビシステムズさんは、一覧ページの更新が手動なんですね。FAXとFaxが混在、コロンが全角と半角が混在しとるで……(フィルタ内で対応済み)

次回は、やっと住所が取得できましたので、ジオコーディングに挑戦したいと思います。

投稿 大野 義貴 [GoogleMaps] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3387

コメントする