稲沢市よりお届けしてます。

Perlをはじめとしたプログラミング周りのあれこれについて。Perl界のモブキャラとして暗躍します(謎)。

宮川プロダクツWeb::Scraperを使って楽天の商品情報をブッコ抜いてみたよ。

待望の冨田尚樹氏の書籍『Perl CPANモジュールガイド』が発売になった。



早速購入!


「この本の登場で、Perl業界が盛り上がること間違いなし!」


などと妄想しつつ、書籍を参考にしながら以前使いこなせずに挫折した

Web::Scraper を試してみた。


お題は
楽天ショップ別ページから、個別商品URLを取得』

#!/usr/bin/perl
# 宮川プロダクツWeb::Scraperを使って
# 楽天ショップ別ページから、個別商品URLを取得してやんよ
# 2011.04.17_scripted by perl48

use Web::Scraper;
use URI;
use utf8;

# 取得したい部分をXPathで指定する。
# <table class="catchTable">内の1番目の<td>内の<a href="">の@href要素を取得したい。
#
# 【実際のHTMLソース↓】
# <table width="100%" border="0" cellspacing="0" cellpadding="0" class="catchTable"> 
#     <tr> 
#         <td width="3%" valign="top" align="center"> 
#             <a href="http://item.rakuten.co.jp/surugaya-a-too/3511089-1/" target="_top"><img src="http://image.www.rakuten.co.jp/com/img/icon/cir_order.gif" border="0"  alt=""></a> 
#         </td> 
#         <td valign="top" align="left"> 
#             <a href="http://item.rakuten.co.jp/surugaya-a-too/3511089-1/" target="_top"><font size="-1">【中古】生写真/アイドル/AKB48/アイドル生ブロマイド 131 : 大島優子【10p12Apr11】【画】</font></a> 
#             &nbsp;&nbsp;
#             <img src="http://image.www.rakuten.co.jp/com/img/icon/icon_arrow01.gif" width="12" height="12" border="0" alt="" align="absmiddle"> 
#             <a href="http://review.rakuten.co.jp/item/1/239310_12458096/1.1/" target="_top"><font size="-1">感想(1件)</font> 
#             </a> 
#         </td> 
#     </tr> 
# </table>
my $scraper = scraper {
    process '//table[@class="catchTable"]/tr/td[1]/a', 'urls[]' => '@href';
};

# ボットの名前をつけてみる
$scraper->user_agent->agent('perl48bot/0.1'); 

# 取得対象ののURLをセット
my $url = URI->new('http://search.rakuten.co.jp/search/inshop-mall/akb48/-/f.1-p.1-s.1-sf.0-sid.239310-st.A-v.2');
my $res = $scraper->scrape($url);

# 繰り返し変数$i の初期値を定義
my $i = 0;

# デフォルトで1ページ30商品表示のため、30回繰り返す
while( $i<30 ){
    print $res->{urls}->[$i] . "\n";
    $i++;
}


で、実行結果はこちら↓

C:\Documents and Settings\perl48\rakuten>scrape_rakuten.pl
http://item.rakuten.co.jp/surugaya-a-too/1321137-1/
http://item.rakuten.co.jp/surugaya-a-too/3398077-1/
http://item.rakuten.co.jp/surugaya-a-too/3511089-1/
http://item.rakuten.co.jp/surugaya-a-too/3398055-1/
http://item.rakuten.co.jp/surugaya-a-too/3398059-1/
http://item.rakuten.co.jp/surugaya-a-too/1304598-1/
http://item.rakuten.co.jp/surugaya-a-too/3398058-1/
http://item.rakuten.co.jp/surugaya-a-too/3476541-1/
http://item.rakuten.co.jp/surugaya-a-too/3511026-1/
http://item.rakuten.co.jp/surugaya-a-too/1661334-1/
http://item.rakuten.co.jp/surugaya-a-too/2210679-1/
http://item.rakuten.co.jp/surugaya-a-too/3509377-0/
http://item.rakuten.co.jp/surugaya-a-too/3526682-0/
http://item.rakuten.co.jp/surugaya-a-too/3612182-1/
http://item.rakuten.co.jp/surugaya-a-too/3476622-1/
http://item.rakuten.co.jp/surugaya-a-too/1411570-1/
http://sa.item.rakuten.co.jp/surugaya-a-too/a/1666978-1-0417/
http://item.rakuten.co.jp/surugaya-a-too/3511019-1/
http://item.rakuten.co.jp/surugaya-a-too/3464466-1/
http://item.rakuten.co.jp/surugaya-a-too/3511091-1/
http://item.rakuten.co.jp/surugaya-a-too/3526413-1/
http://item.rakuten.co.jp/surugaya-a-too/3476552-1/
http://item.rakuten.co.jp/surugaya-a-too/3631077-1/
http://sa.item.rakuten.co.jp/surugaya-a-too/a/3280493-1-0417/
http://item.rakuten.co.jp/surugaya-a-too/3511098-1/
http://item.rakuten.co.jp/surugaya-a-too/3398065-1/
http://item.rakuten.co.jp/surugaya-a-too/3464494-1/
http://item.rakuten.co.jp/surugaya-a-too/3526669-0/
http://sa.item.rakuten.co.jp/surugaya-a-too/a/1952671-1-0417/
http://item.rakuten.co.jp/surugaya-a-too/3509403-0/


欲しいものは取得できた様子。


取得したいURLの変数部分をインクリメントで変更するか、
取得したいURLの一覧テキストファイルを読み込む形にして
グルグル回せば、ショップ全体の情報を一気にブッコ抜ける。


Perl is cool !