今週は出向作業が忙しく、本番環境へアプリケーションをアップロードしてテストする、というのがまだ出来ていません。今日の夜にテストをしてみる予定ではありますが。。
今回の取り組みではデータ収集の高速化のみ対象としているので、本来のテストツールとしての使い方にそぐわないかと思っています。ですが、内部構造を知らないでチューニングも何もあったもんじゃありません。なので勉強を兼ねて書いてみようと思います。
考えている仕組みは、Selenium::Remote::Driver(以下S::R::D)でPhantomJSを操作してブラウジングを行い、遷移先のレンダリングされたHTMLソースからWeb::Scraper でデータを収集することです。
PhantomJS はヘッドレスドライバ(GUIを持たないブラウザみたいなもの)なので、外部プログラムからうまいこと操作してやればGUIを起動させずに自動ブラウジングが可能になります。そして今回外部プログラムに選んだのがS::R::D なわけです。
理由としては、単純にPerlでやりたかっただけです。以前ホームページにお問い合わせフォームを設置する関係でPerlを触ったとき、コードの芸術性や思想哲学に非常に共感できましたし何より書いていて気持ちよかったです。
少し話が外れますけど、自分は最初に入った会社でJavaの研修を受けてプログラミングに挫折した人間なので、書いていて楽しいPerlでやりたいというのが本音です。
さて、PhantomJSは確かにGUIも無いので描画の分だけ高速化できます。でも、データを取りたいサイトがAjaxを多用していたりするとページの読み込みが完了するまで待つ必要が出てきます。これが意外と痛かったりする。
欲しいデータが100あったとして10取るのにページ遷移あたり5秒かかるなら、50秒。
こんなサービス使いたいわけないですよね?(笑)
それじゃあどうしよう、というのが今の課題です。
ともあれ、下記のブログを見ながら色々勉強中です。
http://www.ivaturi.org/