Nokogiri - Работает с XML, а не с HTML - PullRequest
4 голосов
/ 13 апреля 2011

У меня проблема с тем, чтобы заставить Нокогири работать должным образом.Я использую версию 1.4.4 с Ruby 1.9.2.

У меня есть и libxml2 libxslt, и обновленный.Когда я запускаю сценарий Ruby с XML, он прекрасно работает.

require 'nokogiri'

doc = Nokogiri::XML(File.open("test.xml"))
doc = doc.css("name").each do |node|
    puts node.text
end

Войдите в CL, запустите ruby test.rb, верните

Name 1
Name 2
Name 3

И толпа сходит с ума.Я немного подправил, внес несколько корректировок в код ...

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://domain.tld"))
doc = doc.css("p").each do |node|
    puts node.text
end

Назад к CL, ruby test.rb, возвращает ... ничего!Просто новая пустая строка.

Есть ли причина, по которой он будет работать с файлом XML, но не с HTML?

1 Ответ

5 голосов
/ 13 апреля 2011

Для устранения проблемы такого рода нам нужна дополнительная информация от вас.Поскольку вы не даете рабочий URL-адрес, и мы знаем, что Nokogiri хорошо работает для решения подобных проблем, отладка ложится на вас.

Вот что я бы сделал, чтобы проверить:

В IRB:

  1. Получаете ли вы выходные данные, когда делаете: open('http://whateverURLyouarehiding.com').read
  2. Если это возвращает действительный документ, что вы получите, когда переносите предыдущий оператор open в Nokogiri::HTML(...).Для этого необходимо сохранить .read в предыдущей строке, поэтому Nokogiri получает тело страницы, а не поток ввода-вывода.
  3. Попробуйте №2 выше, но удалите .read.Это скажет, если есть проблема с Nokogiri, читающим поток ввода-вывода, хотя я серьезно сомневаюсь, что у этого есть проблема, так как я использую это все время.В этот момент я заподозрил бы проблему в вашей системе.
  4. Если вы получаете документ в № 2 и № 3, то проблема может быть в вашем аксессоре;Я подозреваю, что то, что вы ищете, не существует.
  5. Если оно существует, то проверьте значение doc.errors после того, как Nokogiri проанализирует документ.Это может быть поиск ошибок в документе, и, если это так, они будут там зафиксированы.
...