Nokogiri - En Español

Guía de Nokogiri


Esté artículo en Inglés.


Nokogiri es un analizador de HTML, XML, SAX y Reader. Su uso principal es el de cualquier analizador de este tipo, que es lo que se conoce con el nombre de web scraping, lo que podría traducirse como "raspado" de la red. Básicamente, la idea detrás de esto es extraer datos de sitios en internet a través de medios programáticos. La técnica es fascinante y, debido a sus resultados, ha estado relacionada no solo con el desarrollo web, sino también con el marketing y la ciencia.

Con el paso de los años en el uso cada vez más primordial de internet, es claro que existe en la red una gran cantidad de datos disponibles públicamente con los que estamos en contacto cada vez que realizamos una búsqueda en línea. La idea detrás de web scraping es poder tomar esa información, que normalmente está presente de forma desestructurada en los archivos que componen los sitios web, y poder transformarla en algo analizable. A partir de esto se convierte en una fuente de datos que pueden ser utilizados con diversos fines, desde indexación de sitios, monitoreo y comparación de precios, revisión de productos competidores, obtención de listados de negocios inmobiliarios, monitoreo de presencia y reputación en línea, integración de datos, así como investigación en general.

Está claro que existen implicaciones legales a lo referente al web scraping, por lo que hay que ser cauteloso al trabajar sobre esto. La base de la legalidad a la hora de realizar este procedimiento está en qué es aquello que desea hacerse con la información obtenida, así como también cuáles son las políticas de los sitios sobre los que se esté trabajando. Es claro que motores de búsqueda como Google o Yahoo realizan web scraping en la red constantemente, pero ese contexto es totalmente diferente al que uno puede enfrentarse al desarrollar una aplicación con fines similares. La recomendación en este punto es siempre leer los términos de los sitios sobre los que se trabaja, así como también tener precaución con cómo se utiliza la información obtenida y dónde es publicada.

Dentro de los analizadores utilizados en esta técnica, Nokogiri se destaca por su característica de poder buscar en documentos utilizando librerías nativas (tanto C como Java), lo cual implica que es rápido y que, además, está regido por los estándares. Nokogiri es una "Ruby gem" (gema de Ruby) que transforma una página web en un objeto y hace que obtener información de él se vuelva una tarea muy sencilla. Las “Ruby gems” son librerías de código que miembros de la comunidad han puesto a disposición de otros desarrolladores para que puedan ser utilizadas. Como en todo contexto de código libre, cuanto mayor sea la utilidad de la librería mayor será su fama y su crecimiento en nuevas funcionalidades y mejoras de desempeño. En el último tiempo Nokogiri se ha vuelto muy popular debido a la simpleza de su uso y a la utilidad que brinda a la hora de trabajar con el análisis de archivos HTML y XML, que son aquellos más comunes desde los cuales típicamente se busca extraer información.

Nokogiri permite parsear estos archivos HTML y XML a través de diferentes estrategias (DOM, Reader, Pull, SAX, siendo la primera la más común), y, además, permite trabajar con selectores CSS3 y XPath, así como con transformaciones XSLT.

Es también importante destacar que el hecho de que Nokogiri esté basado en Ruby trae importantes ventajas para que esta gema se haya vuelto tan utilizada. Ruby es un lenguaje muy simple y poderoso, lo cual lo convierte en un terreno muy interesante para personas que recién se inician en el desarrollo de sitios web. A su vez, la comunidad de Ruby es una de las que más ha crecido en los últimos años, lo cual conlleva que existan muchos desarrolladores trabajando con este lenguaje, generando conocimiento y un muy buen nivel de documentación disponible en línea.

Veamos un par de ejemplos básicos para entender la sencillez con la que Nokogiri permite trabajar. En el primero, el código debajo nos permite obtener las noticias de Google News y, a partir de ellas, crear un listado de sus títulos.

El primer paso es parsear los contenidos de Google News en el objeto que Nokogiri crea a partir del archivo HTML, para realizar esto se utiliza la línea:

    doc = Nokogiri::HTML(open('https://news.google.com'))

A continuación definimos los selectores CSS que debemos utilizar para acceder a los artículos:

    article_css_class =".esc-layout-article-cell"

    article_header_css_class ="span.titletext"

Para extraer todos los artículos de noticias, se utiliza la línea:

    articles = doc.css(article_css_class)

Y finalmente, para cada artículo, obtendremos el primero de sus títulos (ya que Google News incluye más de un título por noticia) de la siguiente forma:

    articles.each do |article|

      title_nodes = article.css(article_header_css_class)

      prime_title = title_nodes.first

    end

El siguiente ejemplo sencillo nos muestra cómo trabajar con un archivo HTML y obtener los atributos que se encuentran en él definidos.

Supongamos que tenemos el siguiente HTML:

html = "This is the title of the pageThis is the body of the page"

Para convertirlo a un objeto incluímos la línea:

data = Nokogiri::HTML.parse(html)

Obtener el título de esta página se vuelve tan sencillo como escribir la línea a continuación:

data.title

En este ejemplo, mostrar eso nos dará "This is the title of the page".

De forma similar, si quisiéramos obtener todos los enlaces de una página podemos utilizar el método de XPath sobre el objeto que Nokogiri genera, de la siguiente forma:

data.xpath("//a[@href]")

Como vemos, Nokogiri nos permite trabajar de forma simple con la información sin estructura que normalmente se encuentra en páginas HTML. Permitiendo así estructurarla y acercarla al modelo de objetos, volviéndose de esta forma un adicional muy valioso cuando se desea trabajar con información presente en la web.