スクレイピングとは
- 例えば、以下のような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つを紹介しましたが今日は時間切れなので後日、他の使える便利なメソッドを紹介したいと思う。