はじめに

前回の記事では、WebのHTMLを取得し、Nokogiriを使ってパースする方法を紹介しました。

今回の記事では、Capybara を利用してウェブを操作・情報を取得する方法を紹介します。

Capybaraとは

jnicklas/capybara - GitHub

Capybaraはウェブアプリケーションのテストを行うためによく使われるライブラリです。しかしテストのみに留まらず、ドライバ(後述)を切り替えることによって実際のブラウザに近い動きをするためWebのスクレイピングに利用できます。

とりわけ、Nokogiri単体ではやや手に余る、ログインを必要とするWebスクレイピングやJavaScriptの実行を含んだ動作を簡潔な文法で扱えることが特徴です。Capybaraは以下のような可読性の高いDSL(domain-specific language)を提供します。

"login-form"というidを持つdivの中にある"email", "password"という名のフィールドにそれぞれ"with"で与えた文字列を埋め、「ログイン」と書かれたボタンをクリックする... という、見た目通りの動作をするコードです。

そして、Capybaraは内部的に「ドライバ」を切り替えることで様々なブラウザの動作をエミュレートし、上記のCapybara DSLはすべての対応ドライバで動きます。RackTestSelenium 2.0Poltergeistなど様々なドライバがありますが、今回はJavaScriptも実行可能なヘッドレスブラウザ(レンダリング結果を画面に表示する機能を取り除いたブラウザ)であるcapybara-webkitを利用します。

capybara-webkitのインストール

thoughtbot/capybara-webkit - GitHub

Webkit は、Safariを始めとするいくつかのブラウザで利用されているオープンソースのHTMLレンダリングエンジンのひとつです (ソースコード)。

そしてCapybaraからこのWebkitを利用するためのドライバがcapybara-webkitです。

capybara-webkitはQtに依存しているため、Wikiの該当項目を参考にあらかじめQtをインストールしておく必要があります。Macの場合はdmgをダウンロードするか、homebrewで入ります。

準備が整ったら、bundlerを利用してcapybara-webkitのgemをインストールします。

bundle installを実行したあとGemfile.lockを見ると、Capybaraは前回取り扱ったNokogiriに依存することがわかります。

次のページでは、capybara-webkitを使ってウェブサイトにログインする方法、情報を抜き出す方法を紹介します。