Сбой самой базовой программы Nokogiri — проблема с документацией или ошибка?

StackOverflow https://stackoverflow.com/questions/1134363

  •  16-09-2019
  •  | 
  •  

Вопрос

Я решил попробовать Nokogiri и скопировал следующую программу прямо с http://nokogiri.rubyforge.org/nokogiri/Nokogiri.html (добавление только require 'rubygems' и тот I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 постоянная):

require 'rubygems'
I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1
require 'nokogiri'
require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in...

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods...

####
# Search for nodes by css
doc.css('h3.r a.l').each do |link|
  puts link.content
end

Это не дало никаких результатов.Но когда я изменился

    doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

Для

    doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove').read)

программа сработала так, как ожидалось.Обратите внимание, что единственным отличием было добавление .read в конце строки.Я бы никогда не додумался до этого сам, потому что почти каждый фрагмент кода примера выходит за рамки .read .Единственным местом, которое включило это, по иронии судьбы, был пост одного из разработчиков Nokogiri (на http://tenderlovemaking.com/2008/11/18/underpant-free-excitement).Изменилось ли что-то в API?Что я упускаю из виду?

Я использую Nokogiri 1.3.2.

Спасибо.

Это было полезно?

Решение 3

Я обновился до Nokogiri 1.3.3 и обновил libxml2 до 2.7.3.Мне больше не нужно использовать нелепые I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1 инструкция, позволяющая избежать сообщений об ошибках, и программа работает без посторонних .read.

Другие советы

Я скопировал и вставил ваш (оригинальный) код в файл Ruby и запустил его в своей системе (ruby 1.8.6p369, Nokogiri 1.3.2), и он отлично сработал.Может ли быть что-то еще в вашем окружении, что может быть причиной проблемы?Нокогири в сторону, что делает open('http://www.google.com/search?q=tenderlove') вернуться за тобой?

Не уверен, в чем ваша проблема, но призыв к open находится от open-uri не nokogiri.Так что поэкспериментируйте, выводя нокогири из игры.

$ irb
>> require 'open-uri'
=> true
>> f = open('http://www.google.com/search?q=tenderlove')
=> #<File:/var/folders/LA/LACsuKOVHtaEgmBzsJcGAE+++TI/-Tmp-/open-uri.7455.0>
>> f.read
=> "<!doctype html><head><title>tenderlove - Google Search</title>...

Всегда полезно проверить вашу версию Nokogiri и libxml, чтобы убедиться, что они актуальны.

На сегодняшний день (22.09.09) это актуально для macOS:

nokogiri -v
--- 
nokogiri: 1.3.3
warnings: [ ]

libxml: 
  compiled: 2.7.4
  loaded: 2.7.4
  binding: extension

(Я поместил пробел внутри пустого массива warnings, чтобы он не выглядел как поле.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top