swdsyu 在 淺談HTML Parsing的套件-Nokogiri 一文中,
提及有關處理HTML標籤的套件,
讓我再檢視一下曾處理的問題。
曾在PHP正規劃過濾Excel轉html的table 一文中,
提及有怎麼清除HTML中不必要的標籤,
是用Perl的HTML::Scrubber 的套件。
有關 Perl 的作法已在該文說明,
在此看看用 Ruby 的兩種套件怎麼來清除標籤。
並且用該文裡的範例來測試這兩種套件的使用。
#安裝nokogiri 的 scrub
gem install loofah
#安裝hpricot 的 scrub
gem install hpricot_scrub
# 給perl 用的 scrub,此是在ArchLinux裝該套件的指令
pacman -S perl-html-scrubber
hpricot 的 hpricot_scrub 可以有如perl的HTML::Scrubber 的功能:
hpricot_clean.rb
require 'hpricot'
require 'hpricot_scrub'
doc = Hpricot(open(ARGV[0]))
# 定義只允許哪些標籤是要留下的
doc.scrub(:allow_tags => ['table', 'td'])
puts doc
在執行 ruby hpricot_clean.rb xls.txt 後,
可留下如perl_scrub 執行後的乾淨標籤,
但卻會多一個 <![endif]> 標籤未過濾掉。
以nokogiri 為基礎的 Loofah,
也是另個可簡化標籤的工具,
原目的較是把檔案中不安全的script清除掉,
也可以有簡單的除掉一些不必要的標籤:
loofah_clean.rb
require 'loofah'
doc = Loofah.document(open(ARGV[0]))
doc.scrub!(:whitewash)
puts doc
執行 ruby loofah_clean.rb xls.txt
也可以有接近上述兩者的功能。
只要以nokigiri為基礎的套件,
處理中文碼會有些問題,
所以若要處理中文方面的,
以hpricot 套件處理較方便。
從上述的簡單試用中,
perl 的 HTML::Scrubber 是使祖,
是最成熟的處理結果,
若要有完整嚴謹的指定標籤過濾呈現,
用perl的方案可能較好,
不然就是用ruby來做過濾,
再配合regular expression再做更乾淨的處理。