Así pues, tenemos un documento HTML, pero queremos datos, lo que significa que debemos analizar la respuesta anterior para convertirla en información legible para los humanos.
Empezando por pequeños pasos, extraigamos el título del sitio web. Una característica destacable de Ruby es que todo es un objeto, con muy pocas excepciones, lo que significa que incluso una simple cadena puede tener atributos y métodos.
Por lo tanto, podemos acceder fácilmente al valor del título del sitio web a través de los atributos del objeto parsed_page.
puts parsed_page.title
Continuando, extraigamos todos los enlaces del sitio web. Para ello, utilizaremos un método más genérico que analiza etiquetas específicas: el método css.
links = parsed_page.css('a')
links.map {|element| element["href"]}
puts links
También utilizamos el método map para conservar solo los enlaces con un atributo href del HTML.
Veamos un ejemplo más realista. Necesitamos extraer los artículos del blog, su título, dirección y meta descripción.
Si inspeccionas una de las fichas de artículo, verás que podemos obtener la dirección y el título del artículo a través de los atributos del enlace. Además, la meta descripción se encuentra bajo una etiqueta <div> con un nombre de clase específico.
Por supuesto, hay muchas formas de realizar esta búsqueda. La que utilizaremos consistirá en buscar todas las etiquetas <div> con el nombre de clase td_module_10 y, a continuación, recorrer cada una de ellas para extraer las etiquetas <a> y las etiquetas internas con el nombre de clase td-excerpt.
article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
end
Sí, como ya habrás adivinado, una expresión XPath es lo que nos permite hacerlo, ya que buscamos elementos HTML por sus nombres de clase y sus ascendientes.