LoginSignup
94
91

More than 5 years have passed since last update.

Nokogiri + capybara + PhantomJS(poltergist)を使ってスクレイピング

Posted at

静的ページであれば、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をインストールします。

2.実装

hoge.rb

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として切り分けたりして実装してもらえれば良いかと思います(`・ω・´)

94
91
0

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
94
91