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