Script para baixar e-mails de sites automaticamente
Publicado por Iago Lira (última atualização em 11/08/2016)
[ Hits: 12.184 ]
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
cpb - copia arquivos executáveis
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









