Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
225
208

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-07-01

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

225
208
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
225
208

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?