#はじめに
スクレイピングを補助するgemであるMechanizeを使って、
要素・タグ内のテキスト・タグの属性値を取得するまでをまとめていこうと思います。
#事前準備
gemのインストールを行います。
GemfileにGemを追記します。
gem 'mechanize'
ターミナルでGemをインストールします。
$bundle install
#要素などを取得するまでの流れ
- Mechanizeクラスをインスタンス化する
- HTML情報を取得
- HTML情報から要素を取得
- 要素からテキストや属性値を取得
ざっくりとした流れはこのような感じです。
次は一つ一つの流れを具体的にまとめていきます。
##Mechanizeクラスをインスタンス化する
まずはMechanizeクラスをインスタンス化します
agent = Mechanize.new
##HTML情報を取得
Mechanizeクラスのgetメソッドを使ってHTML情報を取得します。
agent = Mechanize.new
page = agent.get("http://hogehoge.com")
getメソッドの戻り値はMechanize::Pageオブジェクトです。
Mechanize::Pageオブジェクトは、HTML構造を解析した結果とスクレイピングを行うためのメソッドを持ちます。
##HTML情報から要素を取得する
###searchメソッド
HTML情報の中から指定したHTML要素を取得します。
agent = Mechanize.new
page = agent.get("http://hogehoge.com")
elements = page.search('h2 a')
引数に'h2 a'を渡していますが、これはh2要素とa要素を取得するという意味ではありません。
CSSのセレクタのように、h2要素の下のa要素を取得するという意味になります。
また、'.hoge'のようにクラス名で取得することも可能です。
戻り値は配列となります。
取得する対象となる要素が1つしかない場合でも配列で返ってきますので注意しましょう。
###atメソッド
使い方はserachメソッドと同じですが、戻り値が異なります。
取得する対象となる要素が複数あってもすべては取得せずに、最初の要素だけを取得します。
agent = Mechanize.new
page = agent.get("http://hogehoge.com")
element = page.at('h2 a')
##要素から、テキストや属性値を取得する
###inner_textメソッド
タグ内のテキストを取得する際に使用します。
agent = Mechanize.new
page = agent.get("http://hogehoge.com")
element = page.at('h2 a')
element.inner_text
###get_attributeメソッド
タグの持つ属性値を取得する際に使用します。
agent = Mechanize.new
page = agent.get("http://hogehoge.com")
element = page.at('h2 a')
element.get_attribute('href') # element[:href]でも可
#終わりに
Mechanizeの基礎的な使い方をまとめてみました。
今回は要素・タグ内のテキスト・タグの属性値を取得する方法をまとめましたが、
他にもリンクをクリックしたり、フォームに入力して送信するなど、色々なことが可能だそうです。
また機会があったらそのあたりもまとめようと思います。