Script para baixar e-mails de sites automaticamente

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

[ Hits: 7.382 ]

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

Iptables com squid

Projeto Wine's Faces

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - SCRIPT DO IPTABLES

Script que identifica na rede a existência de duplicidades de IPs e MACs que utilizam mais de um IP

Um super limpador do sistema KDu


  

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?




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts