Nokogiri

Não sei se todo mundo já precisou disso mas provavelmente possa precisar. Surgiu um novo projeto para a nossa equipe no trabalho onde temos que criar um robô para ficar “lendo” um site de tempos em tempos. Isso pois havia uma pessoa que sempre ficava olhando o site e mandando email para avisar de algum eventual problema, isso merecia ser automatizado!

Lembrei que um tempo atras tive que fazer a mesma coisa em php, utilizei neste projeto o php simple html dom parser, um bom projeto mas como estamos utilizando ruby precisava de algo equivalente.

Então encontrei o Nokogiri que é um HTML, XML, SAX e Reader parser.

Vamos brincar um pouco com ele. Mas primeiro a instalação:

gem install nokogiri

Para termos um objetivo melhor vamos tentar pegar os títulos da primeira página deste blog.

require 'nokogiri'
require 'uri-open' # Este para ler a página por http

doc = Nokogiri::HTML(open("http://dynaum.com"))
doc.search("#articles//h1").each{ |title| puts title.children.inner_html }

Retorna:

Rails Iphone e Ipad
Restart

O método “search” aceita dois tipos de busca. Nos formatos de tag ou propriedades css e cada uma tem um método específico também.

XPATH

doc.xpath('//h1').each{ |t| puts t }

Isto nos retorna todos as tags h1:

<h1><a href="/">Elber Ribeiro</a></h1>
<h1><a href="/2010/06/29/rails-iphone-e-ipad/">Rails Iphone e Ipad</a></h1>
<h1><a href="/2010/02/16/restart/">Restart</a></h1>
<h1></h1>

CSS

doc.css('#archives').each{ |t| puts t }

Já o método css nos retorna os elementos que tem id “archives”:

<section id="archives">
  <h1></h1>
  <ul>
    There are no articles for this date.
  </ul>
</section>

O método “search” faz tudo junto como utilizado no primeiro exemplo.

Nokogiri não para por aí você pode substituir e criar elementos como desejar, para saber mais basta olhar estes tutoriais.

Com isso ficou bem mais fácil resolver o problema proposto para nós no trabalho.

blog comments powered by Disqus