2011-08-10 6 views
1

NokogiriでHTMLページを解析しようとしていますが、テキストに問題があります。主に、私は不要な文字を取り除くことはできません。解析中、私は文字列を取得するときに、私は常にそれを可能な限りきれいにしようとします。私は印刷できない文字をユニークなスペースに変換しようとしています。ruby​​(1.8.7):スクラップ中に印刷できない文字を取り除くには?

def clear_string(str) 
    CGI::unescapeHTML(str).gsub(/\s+/mu," ").strip 
end 

例えば、(http://www.gisa.cat/gisa/servlet/HomeLicitation?licitationID=1061525からコピー、貼り付け)このHTML断片をsupose

<tr> 
    <td><span class="linkred2">Tramitaci&oacute;:</span></td> 
    <td>&nbsp;ordinària </td> 
</tr> 

いくつかの中間体の例出力は、NetBeans 7.0鋸山を用いて示した:Iは変更多くの後に成功せずにこの方法を使用しますそしてclear_string(方法は、上記で定義)

row.at("td[1]").text # => "Tramitació:" 
row.at("td[2]").text # => " ordinària " 
clear_string(row.at("td[2]").text) # => " ordinària" 
row.at("td[2]").text.scan(/./mu) # => ["\302\240", "o", "r", "d", "i", "n", "\303\240", "r", "i", "a", " "] 

stripはFiのを取り除くしない理由を私は知りません最初のスペース。さらに、clear_stringを適用した後の解析結果は、YAML::dumpを使用してyamlファイルにダンプされます。その内容は、両方のテキストのそれぞれです:

"Tramitaci\xC3\xB3:" 
!binary | 
    wqBvcmRpbsOgcmlh 

第1のものはほとんど問題ないと思われますが、第2のケースの修正方法はわかりません。

+0

どの鋸山のバージョンを使用している。そのため、あなたはそうのようIGNORETRANSLITを組み合わせることができますか? –

+0

mechanize 1.0.0とnokogiri 1.4.4 –

答えて

1

文字セットを別の文字セットに変換する方法の1つは、Iconvです。たとえば、あなたが探していることがちょうどあなたがこのような何かを行うことができASCIIにUTF8に変換されている場合:

require 'iconv' 

s = "ordinària" 
Iconv.conv('ASCII//TRANSLIT', 'UTF8', s) 
=> "ordinaria" 

TRANSLITスイッチが(約一致)unconvertable文字を試してみて、翻字するIconvに指示します。それは変換できない何かを見つけた場合IconvTRANSLITで例外をスローすることを

Iconv.conv('ASCII//IGNORE', 'UTF8', s) 
=> "ordinria" 

注:あなたの代わりに完全unconvertable文字を無視したいなら、あなたはIGNOREスイッチを使用することができます。

Iconv.conv('ASCII//TRANSLIT//IGNORE', 'UTF8', s) 
=> "ordinaria" 
+0

便利なツール!どうもありがとう –

関連する問題