宮川プロダクツ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> # # <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 !