Web::Scraperってすごい件
あるサイトからコピペでデータ集めすると大変になっちゃう時がありませんか?
そこでCPANモジュールのWeb::Scraperを使ったプログラムを勉強してみました。
勉強することになった経緯
まず、「perl スクレイピング」でぐぐってみると、色んな解説やQ&Aサイトが出てきた中で
Web::Scraperが使いやすいようです。このモジュールを作った人が著名なPerlハッカーである
miyagawaさんなのでこれに決めますた。
Web::Scraperはどうやるの?
まず、CPAN.orgでWeb::Scraperをぐぐります。
http://search.cpan.org/dist/Web-Scraper/lib/Web/Scraper.pm
NAMEに「Web Scraping Toolkit inspired by Scrapi」とあり、
ウェブスクレイピングツールキットであることはわかっているんですが、
Scrapiに影響をうけてつくられたもの?だそうです。
Scrapiってなんだ!とぐぐったら、Rubyのスクレイピングツールキットでした。
SYNOPSIS(概要)はWeb::Scraperの使い方が書いてある。
#!/usr/bin/perl use URI; use strict; use warnings; use Web::Scraper; my $ebay_auction = scraper { process "h3.ens>a", description => 'TEXT', url => '@href'; process "td.ebcPr>span", price => "TEXT"; process "div.ebPicture >a>img", image => '@src'; }; my $ebay = scraper { process "table.ebItemlist tr.single", "auctions[]" => $ebay_auction; result 'auctions'; }; my $res = $ebay->scrape( URI->new("http://search.ebay.com/apple-ipod-nano_W0QQssPageNameZWLRS") );
DESCRIPTIONを超訳してみると「Web::Scraperはウェブ上のデータをスクレイパするためのツールです。
RubyのScrapiと同じものです。このモジュールの品質はベータです。このアプリケーションプロトコル
インタフェースはScrapiから盗んだものですが、将来的には変わるかもしれません。」となる。
なるほど!
でもまだ自分で書けるまで理解できていないのでid:naoyaさんからの記事を参考に動かしてみる。
Web::Scraper - naoyaのはてなダイアリー
#!/usr/local/bin/perl use strict; use warnings; use FindBin::libs; use URI; use Web::Scraper; use Encode; use List::MoreUtils qw/uniq/; my $links = scraper { process 'a.keyword', 'keywords[]' => 'TEXT'; result 'keywords'; }->scrape(URI->new(shift)); print encode('UTF-8', $_), "\n" for uniq @$links;
実行してみる
ためしにid:masabozのダイアリーでやってみた。
# perl scraper.cgi http://d.hatena.ne.jp/masaboz/
おお!
DVD-RAM I/O メディア ダイアログ CD-RW Google チェックボックス マイコン プロパティ ATAPI ジャンパー 自作PC シリアルATA CD-ROM ハードウェア タグ 再起動 ソフトウェア ダスター フロントロー エレコム amazon.co.jp 砂時計 アイコン メンテナンス Windows OS ISO ECMA リムーバブル コンピュータ ドライバ レーザー CD-R Blu-ray HD-DVD 青色発光ダイオード 経済効果 技術者 赤外線 ナノメートル 青紫 半導体 関数 セキュリティ 参考書籍 string 引数 ABC 文字列 abc xyz デフォルト スクリプト ディレクトリ PHP php ブラウザ アクセス dir Apache module 山田祥寛 秀和システム 正規表現 Yahoo! 配列 キーワード Goo 変数 ハーシー 毎日コミュニケーションズ
簡単に摘出できてしまうんだな!
今度はその仕組みを勉強しよう。