2011-01-15 11 views
0

を使用して、特殊文字を含む文書の解析、ここで私は、ドキュメントしかし、この特殊文字が正しく解析されません、彼らは「genealógica」として表示し、私は鋸山を使用して特殊文字を含むWebページを解析してい鋸山

def self.get_chapter book,chapters 
     doc=Nokogiri::HTML(open("#{BASE_URL}search=#{book}#{chapters}&version=NVI")).css('.result-text-style-normal') 
     doc.css('.footnotes').remove 
     doc.css('h4').remove 
     doc 
end 
を開く方法です

どのように私はこれを修正することができます任意のアイデア?

+0

実際のURLをサイトに表示して、ページのヘッダーを確認できるようにすると役に立ちます。 –

+0

これはURLですhttp://www.biblegateway.com/passage/?search=Mateo1-2&version=NVI – ryudice

+0

これは文字エンコードの問題です。ここで回答しています:http://stackoverflow.com/questions/2572396/nokogiri-and-special-characters – andrewle

答えて

2

EDIT:ページを見て、どのように処理しようとしているのか、もっとうまくいくと思います。メンテナンス性と読みやすさのために、どのようにページを処理するかを変更しました。

require 'addressable/uri' 
require 'nokogiri' 
require 'open-uri' 

def get_chapter(base_url, params={}) 
    uri = Addressable::URI.parse(base_url) 
    uri.query_values = params 

    doc = Nokogiri::XML(open(uri.to_s)) 
    doc.encoding = 'UTF-8' 

    div = doc.at_css('.result-text-style-normal') 
    div.css('.footnotes').remove 
    div.css('h4').remove 

    doc 
end 

page = get_chapter('http://www.biblegateway.com/passage/', :search => 'Mateo1-2', :version => 'NVI') 
puts page.content 

あなたのようにURLを構築するのではなく、ベースURLとパラメータを分割してチャンクとして渡すのが好きです。私はAddressable gemを使用してURIを構築します。これは私の迷惑なURLのためのものです。 Rubyの組み込みURIは、パラメータのエンコーディングに関連して、今のところgrowing painsを持っています。

あなたが与えたURLの遠端にあるドキュメントは、それがXHTMLなので、XHTML仕様を満たす必要があると言います。 Nokogiri::HTML()を使用してXHTMLを解析できますが、より厳密なNokogiri::XML()を使用するとより良い結果が得られると思います。鋸山にコンテンツを解析するための正しい方向に追加ナッジを与えること

、私が追加:

doc.encoding = 'UTF-8' 

は、私はむしろ、希望のdivを見つけ、一時変数に代入し、その時点から作業を好みますあなたがそうしたように、それを解析ステップに連鎖させるよりも。私たちが文書の塊を扱っているので、これはちょっと慣れて読みやすいものです。

コードを実行すると、すばらしいクリーンなコンテンツが表示されます。埋め込まれたJavascriptがいくつかありますが、JavaScriptは<script>タグ内のテキストとして扱われるため、やむを得ないことです。レンダリングするブラウザ用にHTMLを提示している場合、これは問題ではありません。

+0

これは良く見え、いくつかの新しいことを教えました。私はレールとルビーが初めてです – ryudice

-1

あなたが1.9を使用している場合は、単に休息をピックアップ鋸山、上部に

coding: utf-8

を置くことができます。データを再度外部にする必要がある場合は、iconvを使用することができます。

+0

ソースファイルのエンコーディングを設定すると外部のXHTMLファイルを解析する方法を説明してください。 –

関連する問題