2011-12-12 12 views
7

Estoy tratando de entender Nokogiri. ¿Alguien tiene un enlace a un ejemplo básico de Nokogiri parse/scrape mostrando el árbol resultante? Creo que realmente ayudaría a mi comprensión.¿Cuáles son algunos ejemplos del uso de Nokogiri?

+3

¿Has mirado la documentación/tutoriales: http://nokogiri.org/tutorials. Esta pregunta es un poco demasiado general, podría cerrarse;) –

+0

Esta información se encuentra en los documentos de Nokogiri. Además, si mira a través de algunos de los enlaces relacionados al lado derecho de la página, encontrará ejemplos del uso de Nokogiri, junto con ejemplos de sus resultados. –

Respuesta

10

Usando IRB y Ruby 1.9.2:

carga Nokogiri:

1.9.2-p290 :001 > require 'nokogiri' 
true 

analizar un documento:

1.9.2-p290 :002 > doc = Nokogiri::HTML('<html><body><p>foobar</p></body></html>') 
#<Nokogiri::HTML::Document:0x1012821a0 
    @node_cache = [], 
    attr_accessor :errors = [], 
    attr_reader :decorators = nil 

Nokogiri le gusta documentos bien formados. Tenga en cuenta que agregó el DOCTYPE porque lo analicé como un documento. También es posible analizar como un fragmento de documento, pero eso es bastante especializado.

1.9.2-p290 :003 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>foobar</p></body></html>\n" 

Buscar en el documento para encontrar la primera <p> nodo utilizando CSS y apoderarse de su contenido:

1.9.2-p290 :004 > doc.at('p').text 
"foobar" 

Usar un nombre de método diferente para hacer la misma cosa:

1.9.2-p290 :005 > doc.at('p').content 
"foobar" 

Buscar en el documento para todos los nodos <p> dentro de la etiqueta <body>, y capture el contenido de la primera. search devuelve un conjunto de nodos, que es como una matriz de nodos.

1.9.2-p290 :006 > doc.search('body p').first.text 
"foobar" 

cambiar el contenido del nodo:

1.9.2-p290 :007 > doc.at('p').content = 'bar' 
"bar" 

emitirá un documento analizado como HTML:

1.9.2-p290 :008 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>bar</p></body></html>\n" 

eliminar un nodo:

1.9.2-p290 :009 > doc.at('p').remove 
#<Nokogiri::XML::Element:0x80939178 name="p" children=[#<Nokogiri::XML::Text:0x8091a624 "bar">]> 
1.9.2-p290 :010 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body></body></html>\n" 

En cuanto a raspar, hay muchas preguntas sobre SO sobre utilizando Nokogiri para desgarrar el HTML de los sitios. La búsqueda de StackOverflow para "nokogiri and open-uri" debería ayudar.

+0

También se encuentra una buena introducción del cocreador: http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/ también el diagrama de árbol mencionado en el artículo se puede ver en: http://rubyreflector.com /Estructuras de datos – user1094747

Cuestiones relacionadas