スクレイピングとは、WebページのHTMLを解析して任意の操作を行うことです。だいたいのことはできますが、よく使われるのはimgタグのsrc属性を取得してファイルをダウンロードしたり、フォーム情報を自動的に入力して送信ボタンを押したり、特定のHTMLタグのテキスト情報を取得したりします。
今回はスクレイピングでよく使用される selenium というライブラリをRubyで操作して、当社が提供しているチャットサービス「ChatSquare」の ログイン画面 にあるロゴ画像をダウンロードしてみようと思います。
準備
selenium-webdriver のインストール
$ gem install selenium-webdriver
geckodriver のインストール
https://github.com/mozilla/geckodriver/releases
PATHが通っている場所にダウンロードした実行ファイルを配置してください(私は /usr/local/bin にしました)。
ソース
require 'selenium-webdriver'
require 'open-uri'
# 使用するブラウザを指定
driver = Selenium::WebDriver.for :firefox
# ページにアクセス
driver.get('https://chat-square.com/users/login')
# imgのsrc属性を取得
src = driver.find_element(:xpath, '//img[@class="logo"]').attribute('src')
# ダウンロード
open('logo.png', 'wb') do |output|
open(src) do |data|
output.write(data.read)
end
end
driver.quit # ブラウザを閉じる
たったのこれだけです。seleniumでimgタグのsrc属性を取得した後は、Ruby標準のopen-uriを利用してファイルをダウンロードしています。取得したHTMLのimgタグにアクセスするのに以前ご紹介した Xpath を使用しました。
Selenium::WebDriver のメソッドについてはこちらのページを眺めればだいたい把握できます。
http://seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/Driver.html
スクリーンショットを撮るだけなら
driver.save_screenshot('screenshot.png')
とするだけなのでとても簡単です。
selenium の他にもブラウザを実際に起動せずに高速にスクレイピングする capybara-webkit や
poltergeist などがあります。自分の用途にあった使い方があると思うので、ぜひ活用してみてください。