2015年4月2日木曜日

Perl でスクレイピング

以前に、ヤフーのサイトから株の価格の情報を取り出すために、perl でスクレイピングを行なうサンプルを紹介させていただきました。

http://chaos-fractal.blogspot.jp/2012/12/perl-yahoo.html


最近になって、またPerl でスクレイピングを行なっております。現在、行なっているのは、ネットショップのサイトから、商品の情報を取り出して、テキスト形式のリストを作成するというものです。

「perl は言語仕様が変なので、困ることが多く、使わないほうがよいですよ。」と知人にアドバイスされたことがありますが、perl だと便利なこともあり、つい使ってしまいます。


スクレイピングのサンプル




#!/usr/bin/perl

use strict;
use warnings;
use Web::Scraper;
use URI;
use Encode;


 print STDERR "please input specail page number" ."\n";
 my $page_number = <STDIN>;
 chomp($page_number);

 my $url = 'http://shop.xxxxxxx.co.jp/dir/special/?page=' . $page_number . '&num=50';
 print STDERR $url . "\n";


my $scraper = scraper {
process '//table[@class="itemData"]/tr[1]/td[1]/input[1]','spec[]' => '@id';
process '//table[@class="itemData"]/tr[1]/td[2]','name[]' => 'TEXT';
process '//table[@class="itemData"]/tr[1]/td[3]','disc[]' => 'TEXT';
process '//table[@class="itemData"]/tr[1]/td[4]','price[]' => 'TEXT';

process '//table[@class="itemData"]/tr[1]/td[5]','fie5[]' => 'TEXT';
};

my $res = $scraper->scrape(URI->new($url));
my @spec = @{$res->{spec}};
my @name = @{$res->{name}};
my @disc = @{$res->{disc}};
my @price = @{$res->{price}};
my @fie5 = @{$res->{fie5}};
my $length = @name;

for ($_ = 0; $_ < $length; $_++){
        print encode('sjis',$spec[$_])."\n";
        print "spec: ". encode('sjis',$name[$_])."\n";
        print encode('sjis',$fie5[$_])."\n";
}







0 件のコメント:

コメントを投稿