--- title: このように書くときれいにスクレイピングできた author: kazu634 date: 2009-07-08 url: /2009/07/08/_1292/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4699;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl - scraper ---

すこし工夫すると、Web::Scraperできれいにスクレイピングできるようになった。

参考にしたのは

Perlスクリプト

# === Libraries ===
use strict;
use warnings;
# === Libraries ===
use URI;
use Web::Scraper;
use YAML;
use Encode;
use utf8;
# === Main part ===
# /html/body/div/div/div/div[4]/div/div[2]/div[2]/table/tbody/tr/td/div/strong
my $scraper = scraper {
process
'/html[1]/body[1]/center[2]/center[1]/table[1]/tbody[1]/tr[1]/td[2]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[@class="size2"]',
'shop' => scraper {
process '//tr[1]/td[2]', 'shopname'     => 'TEXT';
process '//tr[2]/td[2]', 'tel'          => 'TEXT';
process '//tr[3]/td[2]', 'address'      => 'TEXT';
process '//tr[4]/td[2]', 'shophour'     => 'TEXT';
process '//tr[5]/td[2]', 'accomodation' => 'TEXT';
process '//tr[6]/td[2]', 'access' => 'TEXT';
process '//tr[7]/td[2]', 'memo' => 'TEXT';
};
};
my $result =
$scraper->scrape( URI->new("http://www.ginza-renoir.co.jp/renoir/051.htm") );
print encode( 'utf8', Dump $result );
# print Dump $result;
# Reference: http://www.e-kotoba.net/
# Below is the sample
#   (1) <div class="ekotoba">...</div>の部分をbodyに取得
#      process 'div.ekotoba', 'body' => 'TEXT';
#   (2) XPATHで指定
#      Firebugsなどを用いる。

実行結果

kazu634@kazu634-desktop% perl scraper.pl                                   ~/work/googlemaps [2987]
---
shop:
access: JR池袋駅東口出て明治通り左並びの東池袋1丁目交差点ヤマダ電機隣
accomodation: 禁煙席:38席喫煙席:32席
address: 東京都豊島区東池袋1-40-2池袋旗ビル2階
memo: ''
shophour: 年中無休全日:7:30-23:00
shopname: 喫茶室ルノアール 池袋東口店
tel: 03-3980-6352

「scraper」に関連する最近のエントリ