Web Crawler NodeJs para extrair Emails a partir de Domínios | Morettic

Web Crawler NodeJs para extrair Emails a partir de Domínios

porLuis Augusto Moretto

Web Crawler NodeJs para extrair Emails a partir de Domínios

Construa seu Webcrawler com Node JS

Introdução

Neste post vou mostrar para você como criar um web crawler para extrair emails a partir de um domínio.  Vamos usar o NodeJS e a biblioteca roboto, que é legal e fácil. Será necessário ter o nodeJs instalado em seu ambiente para rodar o exemplo do Crawler.

Caso você não tenha o NodeJS instalado em seu ambiente de desenvolvimento, faça o download para o seu sistema operacional neste link de download.

Vamos buscar os emails em um domínio e salvar o resultado de busca em um arquivo texto com o mesmo nome do domínio “Crawleando

Caso de uso

Um cenário útil para a ferramenta de crawler de emails seria o lançamento de um produto ou serviço. Uma forma agressiva mas que tem seu mérito seria minerar domínios relacionados com o seu negócio.

Assim constrói-se uma base de emails de um determinado segmento de negócio. Porém recomenda-se fortemente que seja feita um pré qualificação do contato antes de enviar emails.

Uma forma de prequalificar é usando  a API do Fullcontact Twitter ou Instagram.

Criando seu Web Crawler

Então, para desenvolver seu Web Crawler com Node JS siga o passo a passo:

1.- Crie um diretório.
2.- Vá para dentro do diretório no CMD windows ou Bash Linux.
3.- Você precisa instalar o roboto e o htmlstrip-native com o npm.

npm i roboto
npm i htmlstrip-native

4.- Crie um arquivo crawl.js dentro da pasta que você criou.
5.- Cole o código fonte nele: (download crawler)

var roboto = require('roboto');
var fs = require('fs')
var domain = process.argv[2];

var html_strip = require('htmlstrip-native').html_strip;
var stripOptions = {
  include_script : false,
  include_style : false,
  compact_whitespace : true
};

var domainCrawler = new roboto.Crawler({
  startUrls: [
    'http://' + domain,
  ],
  allowedDomains: [
    domain
  ],
  blacklist: []
});

function extractEmails (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}

domainCrawler.parseField('url', function(response, $) {
  return response.url;
});

domainCrawler.parseField('emails_found', function(response, $) {
  var html = $('body').html();
  var striped =  html_strip(html, stripOptions);
  var emails = extractEmails(striped);
  if(emails) {
      fs.appendFile(domain + '.txt', emails + '\r\n', function (err) {
        if (err) throw err;
        console.log('Emails saved to file!');
      });
  }
  return emails;
});

domainCrawler.parseField('title', function(response, $) {
  return $('head title').text();
});

domainCrawler.parseField('server', function(response, $) {
  return response.headers['server'] || '';
});

domainCrawler.crawl();

Varrendo um domínio

Para rodar o seu node e iniciar o “Crawler” execute dentro do diretório do projeto o seguinte comando:

node crawler.js morettic.com.br
nodejs crawler output

nodejs crawler output

Dicas

Rode em uma máquina com boa memória e processador. Evite rodar o crawler em seu ambiente de produção para não impactar na performance dos seus sistemas.

Realize testes locais e como uma melhoria crie um banco de dados ex: MySQL para armazenar os emails, relacionados com uma determinada URL. Além disso informe se o contato extraído foi ou não pré qualificado.

 

Happy Coding 😀