Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録
スクレイピングとは
- 例えば、以下のようなHTMLのサイトがあった場合
index.html
<ul>
<li>TEST1</li>
<li>TEST2</li>
<li>TEST3</li>
</ul>
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'
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つを紹介しましたが今日は時間切れなので後日、他の使える便利なメソッドを紹介したいと思う。
Author And Source
この問題について(Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録), 我々は、より多くの情報をここで見つけました https://qiita.com/bomber0522/items/19591d18bc5d2b1fc97b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .