210
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Rails スクレイピング手法 Mechanizeの使い方

Mechanize

Mechanizeはスクレイピングを行うためのgemです。

gemの追加

gemファイルに下記を追記して、bundle install

gem 'mechanize'

インスタンスの生成とgetメソッド

まず、Mechanizeクラスのインスタンスを生成し、getメソッドを用いてスクレイピングするウェブサイトのHTML情報を取得します。

agent = Mechanize.new
page = agent.get("http://hoge.com")

pageはMechanize::Pageオブジェクトです。

任意の情報を抜き出す

searchメソッド

cssで指定するのと同じ要領で要素を指定出来る。

agent = Mechanize.new
page = agent.get("http://qiita.com")
elements = page.search('title')
puts elements
<title>Qiita - A technical knowledge sharing platform for programmers.</title>

複数該当するものがあれば全て取ってきます。「title」はひとつしかありませんでしたが。「li a」は複数存在します。

agent = Mechanize.new
page = agent.get("http://qiita.com")
elements = page.search('li a')
puts elements
<a class="footer_copyright" href="http://increments.co.jp">© 2015 Increments Inc.</a>
<a href="https://qiita.com/terms">Terms</a>
<a href="https://qiita.com/privacy">Privacy</a>
<a href="http://help.qiita.com">Help</a>
<a href="https://increments.zendesk.com/anonymous_requests/new">Contact</a>
<a href="https://qiita.com/about">About</a>
<a href="http://blog.qiita.com">Blog</a>
<a href="https://qiita.com/api/v2/docs">API</a>
<a href="https://teams.qiita.com/">Team</a>
<a href="http://kobito.qiita.com">Kobito</a>
<a href="http://career.qiita.com">Career</a>
<a class="js-public-form-feedback-link" data-target=".js-feedback-form" data-toggle="modal" href=""><i class="fa fa-heart"></i> Feedback <i class="fa fa-caret-down"></i></a>

atメソッド

searchメソッドは該当要素全てを取得するのに対して、atメソッドは該当1件のみを取得します。

agent = Mechanize.new
page = agent.get("http://qiita.com")
elements = page.at('li a')
puts elements
<a class="footer_copyright" href="http://increments.co.jp">© 2015 Increments Inc.</a>

inner_textメソッド

searchメソッド、atメソッドはタグも含めて取り出します。
inner_textメソッドでタグの中身のメソッドだけ取り出します。

agent = Mechanize.new
page = agent.get("http://qiita.com")
elements = page.search('li a')

elements.each do |ele|
  puts ele.inner_text
end
© 2015 Increments Inc.
Terms
Privacy
Help
Contact
About
Blog
API
Team
Kobito
Career
 Feedback

seachメソッドは複数の要素の情報を取得するので、eachを使うことに注意です。

get_attributeメソッド

aタグの中のhref属性の値を取り出すなど、タグの属性値を取得するときに使うのがget_attributeメソッドです。

agent = Mechanize.new
page = agent.get("http://qiita.com")
elements = page.search('li a')

elements.each do |ele|
  puts ele.get_attribute(:href)
end
http://increments.co.jp
https://qiita.com/terms
https://qiita.com/privacy
http://help.qiita.com
https://increments.zendesk.com/anonymous_requests/new
https://qiita.com/about
http://blog.qiita.com
https://qiita.com/api/v2/docs
https://teams.qiita.com/
http://kobito.qiita.com
http://career.qiita.com

なお、get_attributeメソッドは省略して書けて

ele.attribute(:href)ele[:href]と書けます。

参考

楽々スクレイピング! Ruby Mechanizeの使い方
楽々スクレイピング! Ruby Mechanizeの使い方(2)

関連URL

Ruby MechanizeでBASIC認証する
mechanizeの基本的な使い方 -フォーム処理とHTMLの解析-

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
210
Help us understand the problem. What are the problem?