More than 1 year has passed since last update.

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の解析-

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.