Hpricotを使って、文字列に含まれるHTMLタグを取得
先輩にHpricotというライブラリを教えて頂いたので、これを使ったモジュールを作ってみました。
やりたいこと
- 特定のタグ以外は非推奨タグとする
- 文字列strに含まれるHTMLタグを調べる
- 非推奨タグが含まれていたら、その部分(開始タグ〜終了タグの文字列)を配列化する
require 'hpricot' module HtmlTag AVAILABLE_TAGS = ['b', 'u', 'a', 'span'] def search_unrecommended_tags(str) doc = Hpricot(str) unrecommended_tags = [] AVAILABLE_TAGS.each do |tag| (doc/tag).remove end # 非推奨でないタグは取り除く (doc/"*").each do |h| unrecommended_tags << h.to_original_html if (h.class == Hpricot::Elem) end # docオブジェクトのうち、HTMLタグが使われている部分を配列化 unrecommended_tags end end
ポイント
http://mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricotにある通り、Hpricot::Docオブジェクトの構成要素には、次のクラスがあるようです。
-
- Hpricot::Elem(HTMLの開始タグ + HTMLタグに囲まれている文字列 + HTMLの終了タグ)
- Hpricot::Text(HTMLタグに囲まれていない文字列)
- Hpricot::Comment(コメント)
HTMLタグが使われている部分だけを取り出すには、各要素についてHpricot::Elemクラスかどうかを見ればよい、というわけです。