【Rails】NokogiriじゃなくてMechanize gemで簡単スクレイピング!
先日Nokogiri
を使ったWebスクレイピング方法を紹介しましたが、もっと簡単に出来るgem
を見つけたのでご紹介。
その名はMechanize
利用する準備
gemのインストール
gem 'mechanize'
$ bundle install
スクレイピング先のサイト情報を取得
今回も「はてなブログ」を使ってやってみたいと思います。
先ずは「はてなブログ」の情報を取得します。
class Mechanize url = "http://hatenablog.com/" agent = Mechanize.new page = agent.get(url) end
使い方
titleを取得する
puts page.search('title’)
$ rails runner lib/mechanize.rb <title>Hatena Blog</title>
タグの中身になるテキストを取得する
title = page.search('title') title.each do |ti| puts ti.inner_text end
$ rails runner lib/mechanize.rb Hatena Blog
aタグのリンクurlを取得する
class
を指定したい時は、.hogehoge
のように指定すればok!
entry_a = page.search('a.serviceTop-entry-img-a') entry_a.each do |a| puts a.get_attribute(:href) end . . . # こうしてもやってることは、同じ entry_a = page.search('div.serviceTop-entry > a')
$ rails runner lib/mechanize.rb Running via Spring preloader in process 18370 http://moognyk.hateblo.jp/entry/2018/01/23/080000 http://blog.jnito.com/entry/2018/01/23/075856 http://barzam154.hatenablog.com/entry/2018/01/22/205222 http://ibaya.hatenablog.com/entry/2018/01/23/111105 http://bandaicandy.hateblo.jp/entry/build22 http://www.netlorechase.net/entry/2018/01/22/080000 http://www.hinata-family.com/entry/2018/01/23/064657 http://www.bitco-salaryman.com/entry/2018/01/22/194205 http://zoweb.hatenablog.com/entry/2018/01/22/093904 http://www.beikokukabu.xyz/entry/02 http://hobby-diary.hatenablog.com/entry/2018/01/19/204839 http://www.daij1n.info/entry/2018/01/18/021528 http://www.lean-style.com/entry/fashionfortune http://www.kandosaori.com/entry/2018/01/16/171030 http://www.black-gamer.com/entry/KITTE_pancake https://www.hotpepper.jp/mesitsu/entry/kinniku/18-00007 http://osyobu-osyobu-3889.hatenadiary.jp/entry/the_shutter_is_released14 http://www.hoshinokiiro.com/entry/20180122/recipe/tukurioki-and-hotcook http://www.megamouth.info/entry/2017/01/19/053801 https://srdk.rakuten.jp/entry/2017/01/19/110000 http://mistclast.hatenablog.com/entry/2017/01/22/110637
該当する情報を1件だけ取得したい場合は、at
を使います。
puts page.at('div.serviceTop-entry > a').get_attribute(:href)
$ rails runner lib/mechanize.rb Running via Spring preloader in process 19231 http://blog.jnito.com/entry/2018/01/23/075856
aタグのテキストとリンクを全部取得する
entry_a = page.links entry_a.each do |a| puts a.text puts a.href end
$ rails runner lib/mechanize.rb http://hatenablog.com/ 雪の日のユキヒョウ&オオカミ:東京が大雪だったので多摩動物公園に行ってきた http://moognyk.hateblo.jp/entry/2018/01/23/080000 I AM A DOG http://moognyk.hateblo.jp/entry/2018/01/23/080000 かねてより念願だった、雪の日の動物園に行ってきましたよ! 雪の動物園がずっと見たかった 雪の降る動物園はいつもと違う景色が観られて楽しいだろうな… と思… http://moognyk.hateblo.jp/entry/2018/01/23/080000 ・ ・ ・
現在のURLを取得する
agent.page.uri.to_s
descriptionを取得する
こちらが苦戦中。metainspector
というgem
を使えば取得できることは分かったのですが、上と同じような感じで取得することが出来ない。
puts page.at(':og:description’) puts page.at('meta[:og:description]’) puts page.at('meta[property=:og:description]') puts page.at('meta[property=":og:description"]') puts page.at('meta[name=":og:description"]')
うーん。全部ダメ。どうすればいいのか解決できず..
metainspector
というgem
については、また紹介します。
まとめ
簡単にスクレイピング出来ることが分かりました。
データさえ取得できてしまえば、後はどのように使うかだけなので色々面白いことが出来そうですね。
今日はこんな感じです。