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を提示している場合、これは問題ではありません。
実際のURLをサイトに表示して、ページのヘッダーを確認できるようにすると役に立ちます。 –
これはURLですhttp://www.biblegateway.com/passage/?search=Mateo1-2&version=NVI – ryudice
これは文字エンコードの問題です。ここで回答しています:http://stackoverflow.com/questions/2572396/nokogiri-and-special-characters – andrewle