LoginSignup
11
19

More than 3 years have passed since last update.

Railsでスクレイピング Mechanizeの基礎

Last updated at Posted at 2019-07-31

はじめに

スクレイピングを補助するgemであるMechanizeを使って、
要素・タグ内のテキスト・タグの属性値を取得するまでをまとめていこうと思います。

事前準備

gemのインストールを行います。
GemfileにGemを追記します。

gem 'mechanize'

ターミナルでGemをインストールします。

$bundle install

要素などを取得するまでの流れ

  1. Mechanizeクラスをインスタンス化する
  2. HTML情報を取得
  3. HTML情報から要素を取得
  4. 要素からテキストや属性値を取得

ざっくりとした流れはこのような感じです。
次は一つ一つの流れを具体的にまとめていきます。

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の基礎的な使い方をまとめてみました。
今回は要素・タグ内のテキスト・タグの属性値を取得する方法をまとめましたが、
他にもリンクをクリックしたり、フォームに入力して送信するなど、色々なことが可能だそうです。
また機会があったらそのあたりもまとめようと思います。

11
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19