0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】ログイン情報が必要なサイトでスクレイピングをしてみる

Posted at

この記事では、RubyとSeleniumによりスクレイピングについて説明しています。

前提条件

  • MacBook Air M2
  • Ruby Version 3.1.3

Selenium WebDriverの準備

今回のスクレイピングでは、Selenium WebDriverを使用していきます。
https://www.selenium.dev/documentation/webdriver/

Selenium WebDriverを使えば、RubyやPythonなどのプログラミング言語を通じてブラウザの自動操作をすることが可能です。

Shell.sh
$ gem install selenium-webdriver

ソースコード

scrape.rb
require "selenium-webdriver"
require 'net/http'

# Chromeブラウザを起動
driver = Selenium::WebDriver.for :chrome

# スクレイピングでデータを取得したいサイトに移動
driver.navigate.to "https://xxxx.com"

# `id`と`password`いうnameを持つ要素を取得
id = driver.find_element(:name, 'id')
password = driver.find_element(:name, 'password')

# `Hello WebDriver!`という文字を、上記で取得したinput要素に入力
id.send_keys "xxx@xxx.com"
password.send_keys "password"

# ログインボタンを取得してClickする。
login_button = driver.find_element(:id, 'log_in')
login_button.click

sleep(3)

h3_element = driver.find_elements(:css, 'h3')

puts h3_element

sleep(3)

# ブラウザを終了させる
driver.quit

ソースコードの説明

Cookieの有効化(必要に応じて)

Chromeを起動し、Googleに移動することを確認します。

次にログイン画面に遷移します。
サイトによっては、ここでCookieを有効にする必要があるので、有効にしていきます。

scrape.rb
options.add_argument('--enable-automation')
options.add_argument('--start-maximized')
options.add_preference(:general, 'default_content_setting_values.cookies', 1)

ログインIDとパスワードの入力

続いてログインIDとパスワードを入力していきます。

scrape.rb
user_id = driver.find_element(:name, 'id')
password = driver.find_element(:name, 'password')

driverはSelenium WebDriverのインスタンスで、ブラウザを自動操作するために使用されます。

find_element メソッドによって、取得したページのIDとパスワードの要素を取得していきます。
ここはサイトによってHTMLの要素は異なるのでサイトに合わせて修正してください。

ログインボタンの入力・押下

scrape.rb
login_button = driver.find_element(:id, 'log_in')
login_button.click

続いてログインボタンの要素を取得して押下します。

ログイン後の動作

scrape.rb
sleep(3)

# 表示されたページの要素をコンソールに出力
h3_element = driver.find_elements(:css, 'h3')

puts h3_element

sleep(3)

# ブラウザを終了させる
driver.quit

ログイン後のページの要素を確実に取得するため、3秒間待機させます。

取得できたことが確認できたら、driver.find_elementsで要素を取得しコンソールに表示させます。

サイトによってはスクレイピング防止のため、短期間に高頻度リクエストをするIPを制限する場合があります。

この制限を回避するために

  • IPアドレスを複数用意する
  • 繰り返しスクレイピングする場合には、期間を空ける
    といった対策をしていけるとよいでしょう。

詳しくは下記の記事を読むと詳しく理解できると思うので参考にしてください。
https://qiita.com/kobayashi-masayuki/items/0640a3dd5b12205f3b52

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?