はじめに
Rubyではスクレイピングを行う場合に、利用できるライブラリが幾つか用意されている。使い分けに悩まないように、明確な基準を設けておく。
スクレイピングとは
ここでは、以下をスクレイピングとして扱う。狭義の意味では、2だけのことを表すのかもしれない。
- URLにアクセスして、HTMLなどを取得する。
- 取得したHTMLなどから、必要なデータを抽出する。
ライブラリの選び方
ライブラリは上記の1,2別に必要となるが、「2. 取得したHTMLなどから、必要なデータを抽出する。」部分は、「Nokogiri」というライブラリがデファクトスタンダードとなっているため、Nokogiriを利用する。
「1. URLにアクセスして、HTMLなどを取得する。」部分のライブラリは、対象とするサイトの特質によって利用すべきライブラリが異なる。
Capybara + PhantomJS(poltergist)
JavaScriptで動的に書き換えられる部分のHTMLを取得する場合は、このライブラリの組み合わせを利用する。
インストールが少し面倒なので、JavaScriptを利用しないサイトの場合は、あえて選ぶ必要はない。
Mechanize
JavaScriptを利用しないサイトで、下記のいずれかに該当する場合はこれ。
- POSTでFormデータの送信が必要
- Cookieの制御が必要
- リダイレクトへの対応が必要
net/http
単純にGETして取得するだけならこれで十分。複雑なこともある程度はできるが、Mechanizeを利用したほうが簡単。
net/httpでなく、open-uriでもよい。
まとめ
スクレイピングに必要なライブラリは以下の組み合わせから選定することになる。
1.Nokogiri + Capybara + PhantomJS(poltergist)
2.Nokogiri + Mechanize
3.Nokogiri + net/http
JavaScriptのハンドリングが必要なら、1の組み合わせを選定するしかない。
ハンドリングが不要なら、2 or 3 の組み合わせになるが、「Mechanize」はインストールが容易であり、利用方法も簡易なので、2の構成ががおすすめ。