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”
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.
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();
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
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.