2009-10-23 12 views
5

Como dijo el título, tengo algunas tareas de manipulación DOM. Por ejemplo, quiero: - encuentre todo el elemento H1 que tenga color azul. - encuentre todo el texto que tenga el tamaño 12px. - etc ..cómo manipular DOM con Ruby on Rails

¿Cómo puedo hacerlo con rieles?

Gracias .. :)

actualización

he estado haciendo algunas investigaciones acerca de cómo extraer contenido de la página web basado en este papel->http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

El resumen del paso es:

  1. Obtenga la dirección web que quiero ser extraído (única página web)
  2. agarrar algunos elementos de la página web basada en algunas reglas visuales (Ej: agarrar todos H1 que tienen el color azul)
  3. proceso de los elementos con mi algoritmo
  4. guardar el resultado en mi base de datos.

-lo siento por mi mal inglés

+0

Podría por favor ampliar lo que está tratando de lograr (lo que está haciendo) para que pueda ofrecer un asesoramiento más específico para su problema? Gracias. –

+0

Según su actualización, le recomendaría cambiar su pregunta a algo así como: "Cómo analizar un documento HTML basado en criterios visuales con Ruby" –

Respuesta

1

Para fiable a descifrar qué color de un elemento arbitrario en una página web es, que tendría que aplicar ingeniería inversa a un navegador (para tener en cuenta con precisión de estilo, cortes de marcado, etiquetas rotas, imágenes, etc.).

Un enfoque mucho más fácil sería insertar un navegador existente como gecko en una aplicación personalizada de su creación.

Como su araña exploraría las páginas, las pasaría a su instancia incrustada de gecko donde podría usar getComputedStyle para extraer el color que resulta ser un elemento individual.

Originalmente mencionaste querer usar Ruby on Rails para este proyecto, Rails es un marco para la creación de aplicaciones de presentación y realmente una mala solución para un proyecto como este.

Como punto de partida, le recomiendo que consulte RubyGnome, y en particular la funcionalidad de RubyGnome Gtk::MozEmbed.

+0

Gracias, Mike. ¿Funciona también con la propiedad css? Por ejemplo: quiero seleccionar solo H1 que tenga color azul. – andrisetiawan

+0

Esto no es lo que quiere el OP. Él quiere hacer todo el procesamiento en el lado del servidor, no en JavaScript. –

+0

Publiqué mi respuesta antes de su actualización (cuando pareció que quería una solución del lado del cliente). –

8

Si lo que estás tratando de hacer es manipular documentos HTML dentro de una aplicación de rieles, debe echar un vistazo a Nokogiri.

Se utiliza XPath para buscar a través del documento. Con lo siguiente, encontrará cualquier h1 con la clase css "azul" dentro de un documento.

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.stackoverflow.com')) 
doc.xpath('//h1/a[@class="blue"]').each do |link| 
    puts link.content 
end 

Después, si lo que estaba tratando de hacer era efectivamente analizar el dom página actual, usted debe echar un vistazo a JavaScript y jQuery. Rails no puede hacer eso.

+0

Este fue también mi enfoque original, pero si lees esa sinopsis en papel, no está pidiendo una clase css "azul", sino algo azul en varios sitios con esquemas CSS y de marcado potencialmente muy diferentes. –