[루비] selenium에서 Chrome을 사용한 웹 스크래핑

환경


$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G65

$ ruby -v 
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]

아래 준비


  • Google Chrome 설치
  • chromedriver 다운로드
  • selenium-webdriver (gem) 설치

  • 1. Google Chrome 설치



    Google Chrome 공식
  • 위의 사이트에서 최신 버전의 Chrome을 다운로드 및 설치
  • 설치한 앱을 기동 (기본 브라우저 설정/리포트 송신 등은 기호로)

  • 2. chromedriver 다운로드/경로를 통해서



    2-1. 파일 다운로드
    GUI의 경우:
    h tp // ch로메 d리ゔぇr. s 가시. ㅇㅜㅜㅜㅜ 이 m/그리고 x. HTML
  • LATEST_RELEASE 디렉토리에 최신 디렉토리가 포함되어 있으므로 해당 버전을 다운로드하십시오
  • 2.42 (10/09 시점)

  • CUI의 경우:
      $ curl -O -L http://chromedriver.storage.googleapis.com/2.42/chromedriver_mac64.zip # -> カレントディレクトリ配下にダウンロード
        ※ダウンロードURLはバージョンに合わせてよしなに調べて下さい
      $ unzip chromedriver_mac64.zip
      $ rm chromedriver_mac64.zip
    

    2-2. 파일 이동
      $ sudo mv ['解凍したchromedriver'] /usr/local/bin
    

    2-3. 패스를 통과
      $ export PATH="/usr/local/bin:$PATH"
    

    2-4. 확인
      $ which chromedriver
      --> /usr/local/bin/chromedriver
    

    3. selenium-webdriver(gem) 설치



    3-1. selenium-webdriver 설치
  • Gem 파일을 사용하는 경우
  • gem 'selenium-webdriver' # この記載を追加
    $ bundle install
    
  • 직접 설치하는 경우
  • $ gem install selenium-webdriver
    

    3-2. 확인
    $ gem list | grep selenium-webdriver
    -> selenium-webdriver (3.12.0) ※特定のバージョンが良い場合はよしなに指定
    

    코드


    require 'selenium-webdriver'
    
    @wait_time = 3 
    @timeout = 4
    
    # Seleniumの初期化
    # class ref: https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Chrome
    Selenium::WebDriver.logger.output = File.join("./", "selenium.log")
    Selenium::WebDriver.logger.level = :warn
    driver = Selenium::WebDriver.for :chrome
    driver.manage.timeouts.implicit_wait = @timeout
    wait = Selenium::WebDriver::Wait.new(timeout: @wait_time)
    
    # Yahooを開く
    driver.get('https://www.yahoo.co.jp/')
    
    # ちゃんと開けているか確認するため、sleepを入れる
    sleep 2
    
    #**
      # ブラウザでさせたい動作を記載する
    
      # ex. 検索欄に'Ruby'と入力して、検索ボタンを押す処理
    
      # 検索欄/検索ボタン取得
      begin
        search_box = driver.find_element(:id, 'srchtxt') # 検索欄
        search_btn = driver.find_element(:id, 'srchbtn') # 検索ボタン
      rescue Selenium::WebDriver::Error::NoSuchElementError
        p 'no such element error!!'
        return
      end
    
      # 入力欄に'Ruby'を入力し、検索ボタンを押下
      search_box.send_keys 'Ruby'
      search_btn.click
    #**
    
    # ドライバーを閉じる
    driver.quit
    





    주의점


  • 네트워크가 느린 경우 등은 @wait.until{}를 사용해 요소가 취득할 수 있을 때까지 기다리면 됩니다.
    -> htp : // 가다랭이 g. t ch / e-do-t-rekomen d-ushin g-s p p-u-wai-chin g-fu-r-e-men ts /
  • 로그에 대해서는, 별도로 Logger 오브젝트를 생성해 로깅하는 메소드를 만들어, 그것을 호출하고 있습니다.
  • 
    log_file = File.join('./', "function.log")
    @log = Logger.new(log_file)
    
    def log(msg)
      @log.debug(msg)
    end
    

    참고



    드라이버로의 처리에 대해 (조작 방법을 정리해 줍니다)

    요약



    일에서 자주 사용할 기회가 있기 때문에, 비망도 겸해 썼습니다.
    기억해 버리면, 간단하게 스크래핑 할 수 있으므로 편리하고 있습니다.
    cron과 DB를 조합하면, 데이터를 정기적으로 취해 와서 보존해 두어, 기계 학습등에도 사용할 수 있으므로 편리하네요.

    좋은 웹페이지 즐겨찾기