Hpricotでタグ名を書き換える
Hpricotとは、rubyのhtmlパーサです。
これを使って、タグ名を書き換える時にわかったことをメモします。
タグ名を書き換える
例えば、html内のすべてthタグをtdタグに書き換えます。
require 'rubygems' require 'hpricot' require 'open-uri' doc = Hpricot(open'http://example.co.jp/') (doc/:th).each do |tag| #puts tag.name #=>'th' tag.name = 'td' end puts doc
「.name」でタグ自体の名前を得ることができます。
チュートリアルには、idやclassの検索方法は書いてあったのですが
これが分からず手こずってしまいました。
追記(12/16):.nameでタグを書き換えられると書きましたが、これだと開くタグはできますが閉じるタグが書き換えられないことに気付きました。
そこで、オフィシャルのチュートリアル(http://code.whytheluckystiff.net/hpricot/wiki/HpricotAltering)にあった
swapメソッドを使って強引に書き換えてみることにしました。
require 'rubygems' require 'hpricot' require 'open-uri' doc = Hpricot(open'http://example.co.jp/') (doc/:th).each do |tag| tag.swap("<td>" + td.inner_text + "</td>") end puts doc
要素の中身のテキストだけを得る
あとチュートリアルで役立ったこともメモしておきます。
例えば下のようなhtmlを検索する場合
<th><b>ホゲ</b></th>
inner_htmlだと
(doc/:th).inner_html #=> "<b>ホゲ</b>"
となりますが、inner_textを使うと
(doc/:th).inner_text #=> "ホゲ"
と中身のテキストだけを得ることができます。
よって
<th><b>ホゲ</b>または<b>hoge</b></th>
だと
(doc/:th).inner_text #=> "ホゲまたはhoge"
となります。
Hpricotについて
オフィシャルページ
Hpricot A Fast, Enjoyable HTML Parser for Ruby
http://code.whytheluckystiff.net/hpricot/
日本語のチュートリアル
Hpricot/Showcase
http://mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricot%2FShowcaseHTMLパーサ Hpricot
http://tam.qmix.org/wiki/Hpricot.html