Script para baixar e-mails de sites automaticamente

Publicado por Iago Lira (última atualização em 11/08/2016)

[ Hits: 11.365 ]

Homepage: https://notabug.org/iagolira/

Download autoC 2.3.sh

Download autoC 2.4.sh (versão 2)




Olá pessoal, depois de se deparar com altos preços de lista de e-mails, decidi criar meu próprio programa ou script para criar minhas lista de e-mails.  Para que o script funcione, o lynx ou wget devem estar instalados. Claro, deve estar conectado a internet.

  



Versões atualizadas deste script

Versão 2 - Enviado por Iago Lira em 26/07/2016

Changelog: Algumas melhorias, mas ainda considero o script como uma "gambiarra". :p

Download autoC 2.4.sh


Esconder código-fonte

#!/bin/bash
#+---------------------------------+
#|Script: autoC 2.3                |
#|Autor: Francisco Iago Lira Pasos |
#|Localidade: Teresina - PI        |
#+---------------------------------+
export version
export pathdir
export dirsite
export total
export totalloop
export totalmail
export totalsite
export totalp
export objeto
export regiao
export codel
export codew
export ci
export fimloop

version="1.2"

padrao="lynx" #Padrão para acessar conteúdos
echo "============================================================"
read  -p 'Deseja manter o lynx como padrão sim(s) ou não(n)?' wl
[ "$wl" = "s" ] && echo "Ok! Proseguindo" || padrao="wget"
echo "============================================================"

#Verificando se o wget ou lynz estão instalados:
codew=$(which wget | echo $?)
codel=$(which lynx | echo $?)

if [ $codel -ne 0 ] && [ $codew -ne 0 ]; then
echo "Instale o lynx ou wget!!!!"
read -p 'Deseja instalá-los agora? ' snwl
[ "$snwl" = "s" ] && su -c "apt-get install wget lynx"
else

#Encontrando o total de páginas encontradas
# pathdir="www.bing.com"
# if [ -d $pathdir ]; then
#   rm -rf $pathdir;
# else
#   echo "O arquivo $pathdir não existe!";
# fi

while :
do

echo "======================================================================"
clear
echo "======================================================================"

read -p 'Digite o objeto de pesquisa (ex: estamparia, calçados, pizzaria e etc):' obj
objeto="$(echo $obj | sed 's/ /%20/g')"

echo "======================================================================"

clear

echo "======================================================================"

read -p 'Digite a região de pesquisa (ex: "teresina" "piaui"):' reg
regiao="$(echo $reg | sed 's/ /%20/g')"

echo "======================================================================" 

if [ "$objeto" = "" ] && [ "$regiao" = "" ]
then
 echo "Alerta: Digite pelo menos um objeto de pesquisa!"
 sleep 2
 continue
fi

#Atalho
if [ "$objeto" = "" ]; then
  dirsite=$(echo "contato%22email%22"$regiao)
 elif [ "$regiao" = "" ]; then
  dirsite=$(echo "contato%22email%22"$objeto)
 elif [ -n $regiao ] && [ -n $regiao ]; then
  dirsite=$(echo "contato+email%22"$objeto"%22"$regiao)
fi

if [ -n $objeto ] || [  -n $regiao ]
then
 break
fi

done

# #Deletar a pasta www...
# if [ -d $pathdir ]; then
# rm -rf $pathdir
# fi

#Testando conexão
clear
echo "======================================="
echo "Testando sua conexão..."
echo "======================================="

tmili=$(ping -c 3 www.bing.com | grep time | sed 's/.*time//' | sed '/=/d' | sed 's/ms//g')
tseg=$(printf '%.*f\n' 0 $(echo $(echo "$tmili/1000" | bc) | sed "s/\./,/g") | sed "s/,/./g")

[ $tseg -ge 2 ] && echo "Alerta: Sua conexão está lenta!"
sleep 3

echo "======================================="
echo "Fim do teste..."
echo "======================================="
sleep 2

#Baixando a página do buscador bing
# wget -E -H -k -K -p https://www.bing.com/search?q=$(echo $dirsite)&first=0
# [ $tseg -lt 2 ] && sleep 18 || sleep 20


echo "======================================="
clear
echo "======================================="

#Total de páginas 
dirtotal=www.bing.com/search?q=$(echo $dirsite).html
totalp=$(cat $dirtotal | \
sed 's/^[^>]*[>]//; s/[<][^>]*[>]/\n/g; s/[<].*$//' | grep resultados | \
sed 's/[^0-9]*//g' | sed '/^\s*$/d')

clear

echo "============================================================"
echo "Alerta: Digite múltiplos de 9!"
read -p    "Quantos sites você quer na sua busca?" totalloop
echo "============================================================"

clear

echo "==========================================="
read -p    "Quantos e-mails você deseja? " totalmail
echo "==========================================="

if [ $totalloop -gt $totalp ]; then
 echo "==========================================="
 echo "O número de sites que deseja é invalido!" 
 echo "==========================================="
 totalloop=$totalp
fi


echo "======================================="
clear
echo "======================================="


echo "======================================="
clear
echo "================================================"

read  -p "Deseja continuar script de onde parou (s/n)? " sn1 

echo "================================================"

clear
echo "======================================="
echo "Criando lista de sites..."
echo "======================================="

if [ "$sn1" = "n" ]; then 
  ci=0
  echo "" > .csite
else
  [ -f site.txt ] && rm site.txt
  ci=$(cat .csite)
fi

# calcloop=$(echo "288*$totalloop/500" | bc) #Regra de três simples (minha conveniência)
# fimloop=$(printf '%.*f\n' 0 $(echo $(echo "$totalloop/9" | bc) | sed "s/\./,/g") | sed "s/,/./g") #Arredonda valor para inteiro

i=$ci
if [ "$padrao" = "lynx" ]; then
 INICIO1=$(date +%s)
 for (( i = 0; i <= $totalloop; i++ ))
 do
 totalsite=`cat site.txt | sort | uniq | wc -l`
 if [ $totalsite -gt $totalloop ]; then
 break
 fi
   clear
    echo "======================================="
     echo "Criando lista de sites..."
     echo "Sites processados: $totalsite"
    echo "======================================="
      echo "Número de tentativs: $i"
      echo "SUCCESS: Extracted `wc -l site.txt` and listed them in '`pwd`/urls' file for reference."
      echo $i > .csite
      #Usando o bing para vasculhar a NET

      lynx -dump $(echo "https://www.bing.com/search?q=`echo $dirsite`&first="$i) > gone.tmp
      sed 's/http/\^http/g' gone.tmp | tr -s "^" "\n" | grep http| sed 's/\ .*//g' > gtwo.tmp
      rm gone.tmp
      cat gtwo.tmp | sed '/bing/d;/microsoft/d;/youtube/d;/google/d' | sort | uniq >> site.txt
      rm gtwo.tmp
      sleep 1
 done
 FIM1=$(date +%s)
 tempsite=$(( $FIM1 - $INICIO1 ))

elif [ "$padrao" = "wget" ]; then

INICIO1=$(date +%s)
 for (( ; ; ))
 do
 totalsite=`cat site.txt | sort | uniq | wc -l`
 if [ $totalsite -gt $totalloop ]; then
 break
 fi
   clear
    echo "======================================="
     echo "Criando lista de sites..."
     echo "Sites processados: $totalsite"
    echo "======================================="
      echo "Número de tentativs: $i"
      echo $i > .csite
      #Usando o bing para vasculhar a NET

     wget "$(echo "https://www.bing.com/search?q=`echo $dirsite`&first="$i)" -q -O - | sed 's/h="/\n/g;s/href="/\n/g;s/"//g' | grep "http" | sed -n "s/^http:\/\///p" | sed "s/\/$//" | sed '/bing/d;/microsoft/d;/facebook.com/d;/whatsapp/d;/outlook/d;/msn/d' | grep $objeto | sort | uniq >> site.txt
     
     let i=$i+1
     
     timebegin=`find site.txt -mtime -1 -type f -exec ls -l {} \; | awk '{print $8}' | sed 's/://g'`
     timefinal=`date +%H%M`
     [ $timebegin -ne $timefinal ] && break
     [ $i -gt 900 ] && break
 done
 FIM1=$(date +%s)
 tempsite=$(( $FIM1 - $INICIO1 ))
fi


clear
echo "======================================="
clear
echo "======================================="

if [ -f e-mail.txt ]; then
  rm e-mail.txt;
else
  echo "O arquivo e-mail.txt não existe!";
fi

clear
echo "======================================="
echo "Coletando e-mails..."
echo "======================================="

#Extrai contatos e-mail dos sites
if [ "$sn1" = "s" ]; then 
  lineNumber=$(cat .cmail)
  let cont=$lineNumber
else
  let cont=1
  lineNumber=1
  echo "" > .cmail
fi

cont2=1
tmail=0


if [ "$padrao" = "lynx" ]; then
#=========================================
INICIO2=$(date +%s)
while read site
do
clear
  echo "======================================="
  echo "Criando lista de e-mails..."
  echo "E-mails processados: $tmail"
  echo "======================================="
  echo "Número de tentativas: `echo $cont2`"
  
  if [ $cont2 -ge $lineNumber ]; then
  echo $cont2 > .cmail

  [ $(echo $site | echo $?) -ne 0 ] && continue #Se o endereço IP não funcionar pule a linha

  lynx -dump $site | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" | sort |  uniq >> e-mail.txt
 #altavista.com|aol.com|bol.com.br|brturbo.com.br|globo.com|globomail.com|gmail.com|hotmail.com|ibest.com.br|ig.com.br|itelefonica.com.br|live.com|msn.com|outlook.com|pop.com.br|superig.com.br|terra.com.br|uol.com.br|yahoo.com.br|zipmail.com.br
  fi
  
  let cont2=$cont2+1
  tmail=$(cat e-mail.txt | sort | uniq | wc -l)
  [ $tmail -gt $totalmail ] && break
done < site.txt
  FIM2=$(date +%s)
  tempmail=$(( $FIM2 - $INICIO2 ))    
#==========================================

elif [ "$padrao" = "wget" ]; then
INICIO2=$(date +%s)
while read site
do
clear
  echo "======================================="
  echo "Criando lista de e-mails..."
  echo "E-mails processados: $tmail"
  echo "======================================="
  echo "Número de tentativas: `echo $cont2`"
  
  if [ $cont2 -ge $lineNumber ]; then
  echo $cont2 > .cmail

  [ $(echo $site | echo $?) -ne 0 ] && continue #Se o endereço IP não funcionar pule a linha

  wget "$site" -q -O - | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" | sort |  uniq >> e-mail.txt
 #altavista.com|aol.com|bol.com.br|brturbo.com.br|globo.com|globomail.com|gmail.com|hotmail.com|ibest.com.br|ig.com.br|itelefonica.com.br|live.com|msn.com|outlook.com|pop.com.br|superig.com.br|terra.com.br|uol.com.br|yahoo.com.br|zipmail.com.br
  fi
  
  let cont2=$cont2+1
  tmail=$(cat e-mail.txt | sort | uniq | wc -l)
  [ $tmail -gt $totalmail ] && break
done < site.txt
FIM2=$(date +%s)
tempmail=$(( $FIM2 - $INICIO2 ))  
fi

#Converter lista para csv
clear
echo "======================================="
echo "Aguarde..."
echo "======================================="

a1='e-mail.txt'
a2="$(echo $(echo $a1 | sed 's/\..*//')".csv")"

[ -f $a2 ] && rm $a2

while read i
do 
  name=$(echo $i |sed  -r 's/@/ - /g;s/(^.| .)/\U&/g;s/(.*)(\..{3}).*/\1/g')
  echo "$name;$i" >> $a2
done < $a1

cat $a2 | sort | uniq > $(echo $a".pop")
cat $(echo $a".pop") > $a2
rm $(echo $a".pop")

#Cabeçalho csv
#echo "name;E-mail Address" > $a2
sed -i "1i name;E-mail Address" $a2 #Inseri name;E-mail Address na primeira linha

clear
echo "=========================="
[ $? -eq 0 ] && echo "Concluído com sucesso!" || echo "Aviso: Ocorreu algum erro ao converter $a1 para csv!"


clear
echo "======================================="
clear
echo "======================================="

# if [ -d $pathdir ]; then
#   rm -rf $pathdir;
# else
#   echo "O diretório www.bing.com não existe!";
# fi

echo "======================================="
clear
echo "======================================="
cat site.txt | sort | uniq > site
cat site > site.txt; rm site

cat e-mail.txt | sort | uniq > email
cat email > e-mail.txt; rm email

echo "======================================="
clear
echo "======================================="

# #Renomeando o arquivo
#  if [ -f $(echo $dirsite'_'$(cat e-mail.txt | wc -l)'.txt' | sed 's/+/_/g') ]; then 
#   echo ""
#  else
#   cat e-mail.txt > $(echo $dirsite'_'$(cat e-mail.txt | wc -l)'.txt')
#   rm e-mail.txt
#  fi
 
echo "---------------------------------------------"
echo "---------> Conluído com sucesso! <-----------"
echo "Número de e-mails: $(cat e-mail.txt | wc -l)"
echo "Tempo de captura de sites: $tempsite segundos"
echo "Número de sites:  $(cat site.txt | wc -l)"
echo "Tempo de captura de e-mails: $tempmail segundos"
echo "Tempo de ping a cada 3 tentativas:  $tseg segundos
"
echo "---------------------------------------------"
fi

Scripts recomendados

Instalador de Código Fonte

Gerenciamento de logs em servidores de aplicação

Backup do banco de dados Postgresql

Fedora autenticando no LDAP.

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS EM TODAS AS PASTAS DE UM USUÁRIO


  

Comentários
[1] Comentário enviado por pherde em 11/03/2016 - 16:19h

Curti, muito bom e didático o script! Uma dúvida, porque o Bing ao invés do Google para busca? O Google faz alguma restrição de conexão ou coisa assim?

[2] Comentário enviado por iagolira em 11/03/2016 - 23:37h


[1] Comentário enviado por pherde em 11/03/2016 - 16:19h

Curti, muito bom e didático o script! Uma dúvida, porque o Bing ao invés do Google para busca? O Google faz alguma restrição de conexão ou coisa assim?


Na verdade para usar o google basta fazer uma pequena modificação no script. Eu comecei usando o bing de início só para testes, mas aí evoluí o script e acabei deixando o bing mesmo.
Fiz alguns testes com google, bing e DuckDuckGo, os melhores resultados foram com o google, mas como eu ja tinha elaborado o script somente pro bing, resolvi usar este mesmo.
A única coisa que temos que nos preocupar ao adotar o google é código fonte, pois ambos navegadores usam tags diferentes. E é por isso que resolvi deixar o bing na jogada, não por ser o melhor, mas sim, por comodidade.

[3] Comentário enviado por erickcouto em 26/07/2016 - 00:37h

Só possível usar com sites de busca? ou qualquer site? Obrigado.

[4] Comentário enviado por erickcouto em 26/07/2016 - 12:15h

To rodando o script mas não ta extraindo nada

Na sei se isso tem a ver

=======================================
Testando sua conexão...
=======================================
(standard_in) 1: parse error
=======================================
Fim do teste...


Resultado
---------> Conluído com sucesso! <-----------
Número de e-mails: 0
Tempo de captura de sites: 33 segundos
Número de sites: 0
Tempo de captura de e-mails: 0 segundos
Tempo de ping a cada 3 tentativas: 0 segundos



[5] Comentário enviado por erickcouto em 11/08/2016 - 10:31h

Estou rodando o script, preenche conforme o script responde, mas nao me retorna resultado. Não sei se da falha na conexão, ou algum outro problema.

[6] Comentário enviado por iagolira em 11/08/2016 - 12:28h

Obrigado pelas observações [cite] erickcouto [/cite]. E interessante o erro, pois eu testei várias vezes e funcionou direitinho.
Por favor gere um arquivo ".log"das saídas e envie pro email iagolirapassos@gmail.com.

[7] Comentário enviado por ricardoeov em 07/05/2017 - 11:36h

Sensacional!!Salvou a pátria!
Funcionando perfeitamente!

Acha que daria muita diferença de resultados mudando do bing para o google?



[8] Comentário enviado por hahndouglasf em 21/03/2022 - 16:38h

Olá,

interessante para criação de blacklists, etc...
Teria alguma versão atualizada?
Grato!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts