LoginSignup
4
4

More than 5 years have passed since last update.

Ruby+ Selenium Webdriverでスクレイピング

Last updated at Posted at 2019-02-02

参考:

準備

gemをインストール

Gemfile
gem "selenium-webdriver" #アクセス用
gem "pry-byebug" #デバッグ用
$ bundle install

ミニマムに実行してみる

必要なgemをrequire

require "selenium-webdriver"
require 'pry'

Chrome用ドライバオブジェクト取得

driver = Selenium::WebDriver.for :chrome

URLにアクセス

driver.navigate.to "https://www.google.co.jp/"

name= "q"要素を取得

検索formインプット部分

inputElement = driver.find_element(:name, 'q')

取得要素に検索ワードを設定

formに値が指定される

inputElement.send_keys "パンケーキ"

ボタンを探してきて、サーチする

buttonは2つあるので、"Google検索"の方を選択。(もう一方のボタンは"btnI")

submitElement = driver.find_element(:name, 'btnK')
submitElement.click

# inputElement.submit これだけでも良い

ドライバは終わったら必ず閉じる

driver.quit

入門

このサイトから”ペッシェドーロ東戸塚”を取ってくるhttps://r.gnavi.co.jp/city/kanagawa/cwtav2440000/pancake/rs/

“パンケーキ”の検索結果は、div.r > aの10件のリンク

find_elementメソッドは最初にヒットしたエレメントを取得

(全件ならfind_elements)

search = driver.find_element(:css, "div.r>a")
search.click

店名は a.result-cassette__box-title に入っている

content = driver.find_element(:css, "a.result-cassette__box-title")
puts content.text

最終的なコード

sele.rb
require "selenium-webdriver"
require 'pry'
# Chrome用のドライバを指定
driver = Selenium::WebDriver.for :chrome

# Google検索にアクセス

driver.navigate.to "https://www.google.co.jp/"
# name属性にqが設定されている要素を取得
inputElement = driver.find_element(:name, 'q')
#
# # 取得した要素にパンケーキを設定
inputElement.send_keys "パンケーキ"

# ボタンを探してきて、サーチする(ボタンは2つあるので)
# submitElement = driver.find_element(:name, 'btnK')
# submitElement.click

inputElement.submit #これだけでも良い

#検索結果の最初の一件を取得
search = driver.find_element(:css, "div.r a")
search.click

#店名を取得
content = driver.find_element(:css, "a.result-cassette__box-title")
puts content.text

#閉じる
driver.quit

結果

$ ruby sele.rb 
> ペッシェドーロ 東戸塚

できた!!!

4
4
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
4
4