web scraping com nodejs

Um dia desses, surgiu a necessidade de fazer um web scraping, que consiste básicamente em extrair informações de um determinado site.

Geralmente eu desenvolveria algo em PHP, a linguagem que mais trabalho no dia a dia atualmente. Mas como estou me dedicando a novas tecnologias, resolvi desenvolver isso em javascript, então, lembrei do nodejs.

Só para titulo de curiosidade, caso eu fizesse isso em PHP, usaria uma biblioteca muito boa, a phpQuery, se tiver dúvidas, basta seguir esse tutorial.

Mas, como estamos falando de javascript (nodejs), vamos usar os seguintes componentes:

  • request
  • cheerio - O jQuery do nodejs, o que pode encorajar muitos desenvolvedores a se aventurar no mundo de nodejs.

No exemplo que vamos fazer a seguir, vai buscar o titulo e a url do post do meu blog, mas pode ser usado em qualquer site. O código dessa aplicação é extremamente simples, ficaria assim:

const URL = 'http://renanmpimentel.github.io';

var request = require('request');
var cheerio = require('cheerio');

request(URL, function (err, resp, body) {
  if (!err) {
      var $ = cheerio.load(body);
      var info = [];

      $('article h2 a').map(function (i, links) {
          var text = $(links).text(),
              link = $(links).attr('href');

          info.push({
              link: URL + link,
              desc: text
          });
      });

      console.log(info);
  }
});

A resposta esperada no terminal deve ser a seguinte:

alt text

Você pode fazer o download do exemplo aqui, e caso tenha alguma dúvida deixe um comentário.