JavaScriptが必要なページのスクレイピング

JavaScriptが必要なページをスクレイピングするにはどうしたらいいか調べた。

Selenium

ブラウザを操作してウェブアプリのテストをするツール。
FireFox, Chrome, IEなど様々なブラウザに対応している。
実際にブラウザを立ちあげて色々行うのでやや遅い。

Rubyで書くとこうなる。

require "rubygems"  
require "selenium-webdriver"  
  
d = Selenium::WebDriver.for :firefox  
d.navigate.to 'http://example.com'  
puts d.page_source  

メソッド名がJavaScriptライク。

GUIのない環境で動かすときはXvfbをインストールし、headlessを使う。

require "rubygems"  
require "selenium-webdriver"  
require "headless"  
  
Headless.ly do  
  d = Selenium::WebDriver.for :firefox  
  d.navigate.to 'http://example.com'  
  puts d.page_source  
end  

似たところでWatirがある。

capybara-webkit

Webkitエンジンを使用してウェブアプリのテストをするツール。
ブラウザの立ちあげが必要ないぶん早い。
Qtに依存しているためインストールがやや面倒。

Rubyで書くとこうなる。

require 'rubygems'  
require 'capybara'  
require 'capybara/dsl'  
require 'capybara-webkit'  
  
class Driver  
  Capybara.default_driver = :webkit  
  include Capybara::DSL  
end  
d = Driver.new  
d.visit "http://example.com"  
puts d.html  

ちなみにCapybaraはSeleniumを標準でサポートしている。

Capybara.default_driver = :selenium # これで切り替え  

GUIのない環境で動かすときはXvfb + headlessを使う。

ameblogazo

アメブロの画像を簡単にぶっこ抜くツール
以前の記事でつくったツールが動かなくなっていたので、ちょっと直した。
capybara-webkitを使ってる。