scrAPIを使ってみた

 使ってみたんだけど、3MBのHTMLをパースしたら重くてちょっと不満だった。まだネットであまり使用例を見掛けないので、とりあえず書いたコードを張り付けてみる。

require 'rubygems'
require 'scrapi'

fc = File.open("rubymanjp.hhk").read

hhk_item = Scraper.define do
  process "object param[name=Name]", :name => "@value"
  process "object param[name=Local]", :local => "@value"
  result :name, :local
end

index = Scraper.define do
  array :items
  process "html ul li", :items => hhk_item
  result :items
end

index.scrape(fc).each{|x|
  puts x.name
  puts x.local
}

 3MBのHTMLをパース後の/proc/pid/statusによると、VmPeakが38792kB。1KBをパースしても10MB近くは食ってるので、メモリ使用量的には妥当な感じ、かなぁ。正しくないHTMLでもパースしてくれる所が嬉しい。(正しくないHTMLを扱わないといけないこと自体は悲しい。)
 繰り返しを書くときには、まず全体を定義して(この場合だとindexだ)、その中で繰り返し要素(この場合だとhhk_itemだ)を書いて繰り返しを行う、という感じ。