ElixirでMechanizeは使えないかと検索してみたが見つからない。
他に代わりになるようなライブラリは無いかと探していた所、
この記事に行きあたり、Houndというものを見つけた。
上記記事ではselenium-server経由でスクレイピングを行っているが、
特に複数ブラウザで検証したり、ブラウザを立ち上げる必要もないので、
DriverはPhantomJSを利用する事にする。
まず準備
PhantomJSをインストール
Homebrewではエラーが出たので今回はnpmを使ってインストール
Elixir/mix
mixでプロジェクトを作成して使用するライブラリをプロジェクトの設定ファイルに記述する。
続いてmix deps.getを実行して、プロジェクトに必要なライブラリをインストールする。
最後にconfig/config.exsにhoundの設定を記述する。
参考: [GitHub] hound/config
これでひとまず準備は終わり。
コードを書く
では準備が出来たので、Houndで自分のサイトにアクセスして、サイトのタイトルを取得するプログラムを書いてみる。
いざ実行
まずPhantomJSを立ち上げる
続いてmixで書いたコードを実行する
フォームの操作
次にサイトにログインをして、ログイン後のページ内の情報を取得してみる。
今回はHealthPlanetで試す。
で実行
これでフォーム操作含めたスクレイピングはMechanizeなしでもうまくできそうだ。
今回サンプルで試したHealthPlanetにはサイトに保存されている健康データを
APIで取得できるようになっているので、今度はそっちを試してみようと思う。
今日はここまで。