6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録

Posted at

スクレイピングとは

  • 例えば、以下のようなHTMLのサイトがあった場合
index.html
<ul>
  <li>TEST1</li>
  <li>TEST2</li>
  <li>TEST3</li>
</ul>

<ul><li>の中にある「TEST1, TEST2, TEST3」等の値を取り出すことを言う。(ウェブサイト上のHTMLからある特定のデータを抜き出す処理のこと)

Mechanize

  • Mechanizeはスクレイピングを行うためのGemである。
  • __Mechanizeクラス__が使えるようになる。
  • Mechanizeクラスにはスクレイピングするための様々なメソッドが用意されている。

GemfileにMechanizeを追記(Railsの場合)

Gemfile
# 省略

gem 'mechanize'

bundle installすればOK

Mechanizeクラスで使うメソッドの紹介

HTML情報から指定のタグ要素の情報を検索する

searchメソッド

  • getメソッドで取得したページの情報が入ったオブジェクトに対して使用する。
  • 該当するHTMLのタグ要素が1つでも、返り値は配列の形式で返ってくる。

使い方

elements = Mechanize::Pageオブジェクト.search('セレクタ')

あるウェブページから__h2要素のHTMLの情報を取得する場合__

scraping.rb
agent = Mechanize.new
page = agent.get("http://sample.com/")
elements = page.search('h2') # h2要素を検索
puts elements
  • 出力結果(例)
<h2 class="entry-title index-entry-title">
<a href="/products/1" title="Single Post">sample1</a>
            </h2>
<h2 class="entry-title index-entry-title">
<a href="/products/2" title="Single Post">sample2</a>
            </h2>
<h2 class="entry-title index-entry-title">
<a href="/products/3" title="Single Post">sample3</a>
            </h2>
#以下略

__h2要素の下のa要素__のHTML情報を取得してみる

scraping.rb
agent = Mechanize.new
page = agent.get("http://sample.com/")
elements = page.search('h2 a') # h2要素の下のa要素を検索
puts elements
  • 出力結果(例)
<a href="/products/1" title="Single Post">sample1</a>
<a href="/products/2" title="Single Post">sample2</a>
<a href="/products/3" title="Single Post">sample3</a>
<a href="/products/4" title="Single Post">sample4</a>
# 以下略

このように、該当するHTMLのタグ要素全てが取得される。

  • 以下のようにするとsearchメソッドの返り値が__配列の形式になっている__ことが確認できる。
test_scraping.rb
require 'mechanize'

agent = Mechanize.new
page = agent.get("http://sample.com/")
elements = page.search('h2 a') # h2要素の下のa要素を検索
puts elements[0]
  • 出力結果
ターミナル
<a href="/products/1" title="Single Post">Sample1</a>

以上のように返ってきた値の1番目の要素を取り出すことができるので__配列の形式で返ってきている__ことがわかる。

まとめ

以上でmechanizeを使用したメソッドのうち__getメソッド__と__searchメソッド__の2つを紹介しましたが今日は時間切れなので後日、他の使える便利なメソッドを紹介したいと思う。

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?