静的ページであれば、nokogiriで普通にparseしてスクレイピングできますが( 参考:http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial/ )、jsを使っている動的ページでは勿論できず、、、
今回はそういう問題を解決すべく探していたところ、seleniumでやる方法は結構出てきたんですが、さすがに遅すぎる & ブラウザをインストールしておかないと駄目で何かと面倒だったので、capybara、poltergistで実装してみました。
###1.インストール
gem 'nokogiri'
gem 'poltergeist'
gem 'capybara'
"poltergeist/PhantomJS"の説明とかは省きます。
※詳しく知りたい人はググってみてくださいw
それぞれをインストールします。
次にPhantomJSをインストールします。
-
CentOSにPhantomJSをインストールする
http://konboi.hatenablog.com/entry/2013/07/05/173957 -
phantomjsをインストールしてみる
http://nigohiroki.hatenablog.com/entry/2012/12/14/004915
###2.実装
require 'nokogiri'
require 'capybara'
require 'capybara/poltergeist'
class Hoge
def self.scrape_include_js_contents
#poltergistの設定
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {:js_errors => false, :timeout => 1000 }) #追加のオプションはググってくださいw
end
Capybara.default_selector = :xpath
session = Capybara::Session.new(:poltergeist)
#自由にUser-Agent設定してください。
session.driver.headers = { 'User-Agent' => "Mozilla/5.0 (Macintosh; Intel Mac OS X)" }
session.visit "https://hoge.com"
page = Nokogiri::HTML.parse(session.html)
end
end
ってな感じでできました。
実際にガシガシ使っていく場合は、moduleとして切り分けたりして実装してもらえれば良いかと思います(`・ω・´)