Il programma più di base Nokogiri non riesce - Documentazione Problema o Bug?
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.
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.)