Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(9)
スポンサードリンク
アドビの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
コメントする