はじめに
前回の記事では、WebのHTMLを取得し、Nokogiriを使ってパースする方法を紹介しました。
今回の記事では、Capybara を利用してウェブを操作・情報を取得する方法を紹介します。
Capybaraとは
Capybaraはウェブアプリケーションのテストを行うためによく使われるライブラリです。しかしテストのみに留まらず、ドライバ(後述)を切り替えることによって実際のブラウザに近い動きをするためWebのスクレイピングに利用できます。
とりわけ、Nokogiri単体ではやや手に余る、ログインを必要とするWebスクレイピングやJavaScriptの実行を含んだ動作を簡潔な文法で扱えることが特徴です。Capybaraは以下のような可読性の高いDSL(domain-specific language)を提供します。
"login-form"というidを持つdivの中にある"email", "password"という名のフィールドにそれぞれ"with"で与えた文字列を埋め、「ログイン」と書かれたボタンをクリックする... という、見た目通りの動作をするコードです。
そして、Capybaraは内部的に「ドライバ」を切り替えることで様々なブラウザの動作をエミュレートし、上記のCapybara DSLはすべての対応ドライバで動きます。RackTest
、Selenium 2.0
、Poltergeist
など様々なドライバがありますが、今回は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を使ってウェブサイトにログインする方法、情報を抜き出す方法を紹介します。