ただのにっき
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とした。