javascriptでDOM操作しまくっているサイトをスクレイピングする作業が発生しそうなのだけどWWW:Mechanizeではできないらしくて、ちょっと調べてみた。
すぐに思いついたのはWWW::Seleniumなんだけど使ったことないなぁ。で、CPAN探したらWWW::Mechanize::Firefoxを見つけたのでインストールして使ってみた。
僕のブログの404ページはページがロードされると、AjaxでtagのJSONをゲットしてきて表示するようになっているので、そのページのスナップショットを撮ってみた
きちんとjavascriptを解釈している
use WWW::Mechanize::Firefox; my $mech = WWW::Mechanize::Firefox->new(); $mech->get('http://blog.kzfmix.com/404'); my $rect = { left => 150, top => 0, width => 500, height => 400, }; sleep(3); my $png = $mech->content_as_png(undef, $rect); open my $fh, '>', 'page.png' or die "Couldn't save to 'page.png': $!"; binmode $fh; print {$fh} $png; close $fh;
それから当たり前だがアクセスログのUser-Agentは
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
とFirefoxのものとなる。
というわけで、WWW::Mechanize::Firefoxを使ってスクレイピングをすればjavascriptでDOMを組み立ててるサイトやAjaxで通信しているサイトでもいけそうな気がしている。その後はWeb::QueryでDOMいじりをすればよさそうだ。
FrePanをいまさら知った。LDRでフィードを購読するようにしといた。