capybaraはWebアプリケーションのテスト用のライブラリとして有名ですが、テスト目的でなく、単にスクレイピング用のツールとしても使えます。この記事ではcapybara+selenium+chromeヘッドレスを使用してWebページをスクレイピングするサンプルを紹介します。
目次
動作環境
- Mac OS High Sierra 10.13
- ruby 2.5
capybaraのセットアップ
まずはcapybaraのセットアップからです。selenium-webdriver経由でヘッドレスchromeを操れるように設定します。最初に必要なライブラリをhomebrewでインストールしておきます。
📄Gemfile
$ brew install chromedriver
次に必要なgemをインストールするため、Gemfileを作ります。
source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'capybara' gem 'selenium-webdriver' gem 'launchy'
lauchyというのはスクリーンショットを取ったと同時にプレビュー.appで開くようにしてくれるgemです。いつも通りbundle install
してください。
これでcapybaraを使用する準備ができたので、capybaraの初期設定をします。
📄scrape.rb
require 'capybara' require 'selenium-webdriver' Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( chrome_options: { args: %w(headless disable-gpu window-size=1280,800), }, ) ) end Capybara.javascript_driver = :selenium
chrome_options
の詳しい説明などは こちら で確認してみてください。
ひとまず、これでcapybaraを使用する準備が整いました。
使ってみる
ではgoogleのトップページにアクセスして、スクリーンショットを保存してみましょう。先程のscrape.rb
に次のコードを追記します。
📄scrape.rb
... def start_scraping(url, &block) Capybara::Session.new(:selenium).tap { |session| session.visit url session.instance_eval(&block) } end start_scraping 'https://www.google.com/' do # ここにスクレイピングのコードを書く p title #=> "Google" save_and_open_screenshot end
Capybara::Sessionを開始して、Googleのページのスクリーンショットを保存します。ヘッドレスなので実際にChromeは可視化しませんが、ちゃんとアクセスできているのがスクリーンショットを見れば分かると思います。
あとは煮るなる焼くなり好きにして下さい。capybaraの使い方に関しては解説サイトもたくさんあるので、ググってみてください。
github
サンプルプロジェクトをpushしていますので、よかったら使ってください。
関連する記事
- 食べログからGoogleマップに移行するため🔖保存済み一覧をCSVで出力する
- Protractor+CoffeeScriptでAngularJSをE2Eテスト
- Ubuntu 20.04インストールしてからやること
- Ubuntu 22.04インストールしてからやること
- Ubuntu 21.04インストールしてからやること