РЕДАКТИРОВАТЬ: я сделал немного больше работы, глядя на страницу, как вы пытаетесь обработать ее, и думаю, что это работает лучше. Я также изменил способ обработки страницы, потому что он был не так понятен, как то, как мне нравится его видеть, для удобства обслуживания и удобства чтения.
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-адреса и параметров. Я создаю URI, используя Addressable gem, который является моим способом обращения к URL-адресам. Встроенный в Ruby URI сейчас испытывает некоторые проблемы с ростом , связанные с кодированием параметров.
Документ в дальнем конце URL-адреса, который вы дали, говорит, что это XHTML, поэтому он должен соответствовать спецификациям XHTML. Вы можете проанализировать XHTML, используя Nokogiri::HTML()
, но я думаю, что вы получите лучшие результаты, используя Nokogiri::XML()
, что более строго.
Чтобы дать Нокогири дополнительный толчок в правильном направлении для анализа содержимого, я добавляю:
doc.encoding = 'UTF-8'
Я предпочитаю найти нужный div и присвоить его временной переменной и работать с этого момента, а не делать это прикованным цепью к шагу разбора, как вы. Это немного более идиоматично и читабельно, потому что мы имеем дело с фрагментами документа.
Запуск кода выводит то, что кажется хорошим и чистым содержимым. Есть некоторый встроенный Javascript, но это неизбежно, потому что Javascript рассматривается как текст внутри тегов <script>
. Это не проблема, если вы представляете HTML-код для отображения в браузере.