Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
207
Help us understand the problem. What is going on with this article?
@shizuma

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

More than 5 years have 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の解析-

207
Help us understand the problem. What is going on with this article?
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
shizuma
web&DeepLearningエンジニア。 ACES.inc←東京大学大学院/東京←鹿児島/blog https://blog.seishin55.com ; Qiita https://qiita.com/shizuma ; note https://note.mu/seishin55
aces
ACES(エーシーズ)は、 画像認識を中心としたAIアルゴリズムの力で、リアル産業のDX(デジタルトランスフォーメーション)を推進し、シンプルな社会を実現する会社です。ヒトの働き方をデジタルの力で 自動化・効率化することで、誰もが生き生きと 生きられる社会を実現していきます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
207
Help us understand the problem. What is going on with this article?