Ruby + Seleniumでウェブサイトをスクレイピングする

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

ウェブサイトのスクレイピング

ウェブサイトを定期的にチェックしたり、開発中のウェブサイトを自動テストするときにプログラムでウェブサイトをスクレイピングすると手間が大幅に軽減されます。今回はRuby + Seleniumでスクレイピングするサンプルプログラムを共有します。

 

Yahoo!検索結果のスクレイピング

Yahoo!にて「テスト」と検索したときに結果を表示するサンプルプログラムを紹介します。

サンプルプログラム

require 'headless'
require 'watir-webdriver'
require 'webdriver-user-agent'
require 'sanitize'

###############################################
# スクレイピング
###############################################
class ScrapingController
  ###############################################
  # コンストラクタ
  ###############################################
  def initialize()
    @sleepTime = 2    #スリープする秒数
  end
  
  ###############################################
  # Yahooの検索後のページを表示する
  ###############################################
  def getSearchYahoo(pSearchWord)
    #ブラウザの開始
    startBrowser(false)

    #ヤフーで検索結果を表示する
    @browser.goto('http://search.yahoo.co.jp/')
    @browser.wait
    sleep(@sleepTime)

    @browser.text_field(:name, 'p').set(pSearchWord) 
    @browser.button(:value, '検索').click
    sleep(@sleepTime)

    puts(@browser.text)

    #ブラウザの終了
    endBrowser()
  end

  ###############################################
  # ブラウザの開始
  ###############################################
  def startBrowser(pIsSmartPhone = false)
    @headless = Headless.new
    @headless.start

    profile = Selenium::WebDriver::Chrome::Profile.new
    profile["intl.accept_languages"] = "ja"
    profile["general.useragent.locale"] = "ja-JP"

    if pIsSmartPhone then
      @driver = Webdriver::UserAgent.driver(:browser => :chrome, :profile => profile, :agent => :iphone)
      @browser = Watir::Browser.new(@driver)
    else
      @browser = Watir::Browser.new(:chrome, :profile => profile)
    end
  end

  ###############################################
  # ブラウザの終了
  ###############################################
  def endBrowser()
    if @browser then
      @browser.close
    end
    if @headless then
      @headless.destroy
    end
  end
end


puts("-----ruby_start-----")

lScraping = ScrapingController.new
lScraping.getSearchYahoo('テスト')

puts("-----ruby_end-----")

サンプルプログラムの出力結果

root@localhost:# ruby test.rb
-----ruby_start-----
ウェブ
画像
動画
辞書
知恵袋
地図
リアルタイム
一覧
»
検索設定
色切り替え
»
Yahoo! JAPAN
ヘルプ
Yahoo! JAPAN
×
条件指定
キーワード入力補助を開く
約177,000,000件
ゲスト さん[ログイン]
検索ツール
▼


関連検索ワード
テストステロン
テストステロンを増やす
テスト勉強の仕方
テストセンター

============================================
====================中略====================
============================================

検索設定
モスキート音聞こえますか?
プライバシー - 利用規約 - 広告について
- 検索結果への広告掲載 - 免責事項 - ヘルプ・お問い合わせ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.
-----ruby_end-----

 

さいごに

スクレイピングは色々と応用が利く技術ですが、使い方を間違うと接続先のサーバーへのDOS攻撃になってしまいます。本記事のサンプルでは1アクセスごとに2秒ほど時間を空けていますが、接続先のサーバーに迷惑がかからないように必ず注意してください。

 

 

ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。

created by Rinker
徳丸 浩(著)
ページ数: 688ページ
出版社:SBクリエイティブ
発売日:2018/06/21

出典:amazon