MechanizeでHTMLだけをパースする

Rubyスクレイパーを組む際に、僕はMechanizeをよく使います。
パーサが未完成なときはサイトへのアクセスは最小限にしたいですよね。

そこで、サイトのHTMLをローカルへ落としてきて、HTMLだけをパースするのなら
アクセス先のサイトへはテストアクセスしなくてすむようになります。

今回は、MechanizeでローカルHTMLをパースする方法をご紹介します。

まず、パースしたいページ(http://www.hogehoge.com/index.html)をローカルへダウンロードします。
それをパースするコードはこんな感じです。

parser.rb

#!ruby
require 'mechanize'

# サイトへアクセスしないで、ローカルHTMLから WWW::Mechanize::Pageクラスを生成
page = WWW::Mechanize::Page.new(URI.parse("http://www.hogehoge.com/index.html"),
  {'content-type'=>'text/html'},
  open('index.html', 'r'){|f|f.read},
  200)

# パースしてみる
page.search("table").each{|table|
  print("inner table text: ", table.inner_text, "\n")
}

こんな感じです。