トップ 最新

ただのにっき

2007-02-21(水) [長年日記]

高速HTMLパーサー「Hpricot」を使ってみる

2000個以上ある手作りHTMLファイルの一部分を全自動で書き換える、という楽し〜いお仕事(棒読み)をもらったので、エンジンがCで書かれていて速いと評判のHpricotを使ってみることにした。

……その前に、(いい加減逃げてばかりもいられないので)とうとうRubygemsを導入したわけだが、そのへんは割愛。$HOME配下に入れてあるruby 1.8.5-p12の環境に入れようとしたのに、コマンドファイルのshebangが「#!/usr/bin/env ruby」のままだったというのが唯一のハマりポイント。

Rubygemsさえあれば、インストールは簡単:

% gem install hpricot

ライブラリの使い方はHpricot Showcase-Jaを参考にした。つっても、狙ったdiv要素を探して別の何かに置き換える、なんてコードは、この程度だ:

require 'rubygems'
require 'hpricot'

doc = open( ARGV.shift ){|f| Hpricot( f ) }
elem = doc / 'div.foo' # この「/」メソッドがキモい
elem.remove
elem.before( '<!-- bar -->' )
print doc.to_html

実は、Elements#beforeやafterの挙動がおかしくて……というか親要素とのからみでおれが期待する動作にならないので……、wrapメソッドを使ってゴミ要素を挿入したのち、別途正規表現を使って変換するという美しくないコードになっちゃったけどまぁいいや。

評判どおりかなり速くて、2000個のHTMLファイルを処理するのに、数分で済んだ。年中メモリ不足であえいでいるウチのcoLinux環境にしてはかなりの速度である。ValidでないHTMLでもエラー吐いて死んだりせず、それどころか正しい要素を補ってくれたりするのは良し悪しだが、今回はOKとした。

Tags: ruby hpricot

hatena-graph-update 1.0.0

ダイエット記録用に作ったhatena-graph-updateを1.0.0としてパッケージした(→RAA)。まぁ、使う人はほとんどいないと思うが。

gemを作ってみないとなぁ。