Web::ScraperとWWW::MechanizeでCDBabyからデータ取得

前回記事 Web::Scraperを使ってみた - ragutarouの日記 の発展形。
"see more"というリンクがなくなるまでリンクを辿りデータを取得していく。

#!/usr/bin/perl
use strict;
use warnings;
use Web::Scraper;
use WWW::Mechanize;
use URI;
use YAML;

my $url = new URI('http://cdbaby.com/top/223');
my $mech = new WWW::Mechanize;
$mech->add_header(Connection => 'keep-alive');
$mech->get($url) or die $!;

# Scrape
my $scraper = scraper {
    process 'div.albumbox>h3>a', 'title' => 'TEXT', 'link' => '@href';
    process 'div.albumbox>div.price', 'price' => 'TEXT';
};
my $item = scraper {
    process 'div#content li', 'result[]' => $scraper;
};

# Follow Link & Print
do {
    my $res = $item->scrape($mech->uri());
    warn Dump $res;
} while ($mech->follow_link(text => 'see more'));

さくらインターネットのレンタルサーバでWeb::Scraperをインストール

Webサービスを作ってみようということで、ついにレンタルサーバさくらインターネット)を借りました。まずはsshでログインして、PerlモジュールのWeb::Scraperを使えるようにします。

一般ユーザでCPANインストールができるようにする

iandeth. - 一般ユーザ環境におけるCPANモジュールの使い方 を参考に設定

〜以下、必要なフォルダとMyConfig.pmを作成〜
$ cd ~
$ mkdir perl
$ mkdir -p .cpan/CPAN
$ vi .cpan/CPAN/MyConfig.pm


〜MyConfig.pm の以下の部分を修正〜
$CPAN::Config->{cpan_home} = undef;
$CPAN::Config->{makepl_arg} = 'PREFIX=~/perl';
$CPAN::Config->{histfile} = "$ENV{HOME}/.cpan/histfile";

CPANよりモジューインストール

いきなり Web::Scraper をインストールしようとすると HTML::TreeBuilder::XPath が無いよと言われるので、以下の順でインストール

perl -MCPAN -e shell
cpan> install HTML::TreeBuilder::XPath
cpan> install Web::Scraper

perlからインストールしたモジュールを呼び出す設定

use Web::Scraper; 行の前に以下を追加する

use lib '/home/ユーザ名/perl/lib/perl5/site_perl/5.8.8/';