Rubyでスクレイピングするとたまに失敗する

RubyでNokogiriを使ってウェブサイトをスクレイピングしているとたまに要素がないってエラーが..
おそらくHTMLのレスポンスが来る前に動いているようなので対策してみました

のGemを使うことにしました

事前準備といてGoogle Chrome と chrome driverを入れました

$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable

$ sudo apt-get install unzip xvfb

googleのwebdriverのzipをダウンロード
Downloads – ChromeDriver – WebDriver for Chrome

unzipして使えるようします

$ chmod +x chromedriver
$ sudo chromedriver /usr/local/share
$ sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
$ sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

google chrome をインストール

$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable

あとはRubyを書きます

Gemfile

source "https://rubygems.org"

gem "nokogiri"
gem "hipchat"
gem "slack-api"
gem "watir"
gem "watir-webdriver"
gem "headless"

sample.rb

require 'open-uri'
require 'nokogiri'
require 'watir'
require 'watir-webdriver'
require 'headless'

url = 'http://google.co.jp'

headless = Headless.new
headless.start
browser = Watir::Browser.new :chrome

browser.goto url
doc = Nokogiri::HTML.parse(browser.html)
p doc.xpath('//div[@class="sample"]/a')[0].text

browser.close
headless.destroy

$ bundle install
して
$ ruby sample.rb

といった感じでできました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください