Domanda

ho deciso di dare Nokogiri una prova, e copiato il seguente programma direttamente da http: // nokogiri.rubyforge.org/nokogiri/Nokogiri.html (aggiungendo solo la require 'rubygems' e la costante 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

E 'tornato non ha prodotto risultati. Ma quando ho cambiato

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

a

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

il programma ha funzionato come previsto. Si noti che l'unica differenza era l'aggiunta del .read alla fine della linea. Non avrei mai capito questo da sola, perché quasi ogni bit di codice di esempio lascia fuori il .read. L'unico posto che lo include, per ironia della sorte era un post di uno degli sviluppatori Nokogiri (all'indirizzo http://tenderlovemaking.com/2008/11/18/underpant-free-excitement ). Ha fatto qualcosa nel cambiamento API? Che cosa mi manca?

sto usando Nokogiri 1.3.2.

Grazie.

È stato utile?

Soluzione 3

ho aggiornato a Nokogiri 1.3.3, e aggiornato libxml2 alla 2.7.3. Non ho più bisogno di utilizzare l'istruzione I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1 ridicolo per evitare messaggi di errore e il programma funziona senza il .read estranei.

Altri suggerimenti

ho copiato e incollato il codice (originale) in un file Ruby e fatto funzionare sul mio sistema (rubino 1.8.6p369, Nokogiri 1.3.2) e ha funzionato bene. Potrebbe esserci qualcosa di diverso nel vostro ambiente che potrebbe essere la causa del problema? Nokogiri a parte, che cosa fa ritorno open('http://www.google.com/search?q=tenderlove') per te?

Non sono sicuro che il tuo problema è, ma la chiamata alla open è da open-uri non nokogiri. Quindi, fare alcuni esperimenti prendendo nokogiri fuori gioco.

$ 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>...

E 'sempre bene controllare la versione di Nokogiri e libxml per assicurarsi che siano in corso.

A partire da oggi (9/22/09) questo è corrente su MacOS:

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

libxml: 
  compiled: 2.7.4
  loaded: 2.7.4
  binding: extension

(ho messo uno spazio all'interno della matrice avvertimenti vuoti per evitare che si cerca come una scatola.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top