Script para baixar e-mails de sites automaticamente
Publicado por Iago Lira (última atualização em 11/08/2016)
[ Hits: 12.120 ]
Homepage: https://notabug.org/iagolira/
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ão 2 - Enviado por Iago Lira em 26/07/2016
Changelog: Algumas melhorias, mas ainda considero o script como uma "gambiarra". :p
#!/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
olhaMeuDesktop 0.1 - Aplicativo para gravar Área de Trabalho
slacklibre - Seu Slackware 100% Livre
O que fazer após instalar o Debian 8 - versão em Shell Script
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









