Blog : extractor

Come estrarre indirizzi email online da Testo

Come estrarre indirizzi email online da Testo

Talvolta si può avere la necessità di dover estrarre indirizzi email da un testo per creare un listato da utilizzare ad esempio per l’invio di una newsletter o per creare un database di indirizzi.

L’algoritmo per effettuare tale operazione è molto semplice in quanto un indirizzo email è costituito da una sequenza di caratteri ben definita ovvero da: [testo, numeri e caratteri speciali] @ [testo, numeri e caratteri speciali] . [testo]

Per gli amanti della programmazione risulterà molto facile realizzare uno script in grado di parserizzare del testo e di estrarne gli indirizzi email ma, ovviamente, pensiamo anche a chi non è addotto alla programmazione.

Esistono infatti diversi tool dove è possibile estrarre indirizzi email online semplicemente partendo da un testo con un semplice copia/incolla.

Il mio preferito, seppur non gode di un’interfaccia grafica notevole, è senza dubbio Email Extractor disponibile qui.

L’utilizzo è molto semplice, basta incollare nella casella predisposta il qualsiasi testo, anche codice, da cui vogliamo estrarre gli indirizzi.

Estrarre indirizzi email da Pagine Gialle

Estrarre indirizzi email da Pagine Gialle

Qualche annetto fa, ho avuto la necessità di (far finta 😉 ) di ottenere svariati indirizzi email dal portale Pagine Gialle per contattare qualche azienda di una determinata categoria merceologia. In quel periodo studiavo PERL quindi perché non provarci 🙂 Ora, a distanza di anni, ritrovo lo script e da bravo Opensourcer pubblico qui l’estrattore.

 

Non ho verificato se sia ancora possibile estrarre indirizzi email da Pagine Gialle poiché probabilmente il portale avrà cambiato qualche parametro. Sono sicuro però che con qualche semplice modifica può tornare funzionante 😉 .

 

NB: inviare e-mail ad indirizzi che non hanno prestato il consenso è reato. Lo script è rilasciato a scopo di ricerca, si diffida ogni uso illecito.

 

#! usr/bin/perl
$queryString='http://www.paginegialle.it/pgol/p-1/4-';
$keywords = $ARGV[0];
$location = $ARGV[1];
$raggio = $ARGV[2];
unless(open DATI, '>' . 'export.txt') {
die "\nNon è stato possibile creare il file di esportazione\n";
}
##########################################################################################################
######################## Creo il finto Browser ###########################################################
##########################################################################################################
#use strict; 
#use warnings; 
 
use LWP::UserAgent;
use HTTP::Cookies;
$ua = LWP::UserAgent->new();
print "Fake browser creato.\n";
$cookies = HTTP::Cookies->new(
file => "cookies.txt",
autosave => 1,
);
print "Ricezione cookies abilitata.\n";
$ua->cookie_jar($cookies);
print "Codifica cookies effettuata.\n";
$ua->agent("Windows IE 7");
print "Dichiarazione di essere il browser più scadente in circolazione comunicata ;)\n";
##########################################################################################################
######################## Rendo GET friendly la keyword della categoria da ricercare ######################
##########################################################################################################
$keywords =~ s/\s/%20/g;
$queryString=$queryString.$keywords;
##########################################################################################################
######################## Rendo GET friendly la location da ricercare #####################################
##########################################################################################################
if($location){
 $location =~ s/\s/%20/g;
 $queryString = $queryString."/3-".$location; 
}
##########################################################################################################
######################## Porto al massimo il numero di risultati per una pagina ##########################
##########################################################################################################
$queryString = $queryString."?mr=50";
##########################################################################################################
######################## Rendo GET friendly il raggio entro il quale devo cercare ########################
##########################################################################################################
if($raggio){
 if($raggio == '25'){
 $queryString = $queryString."?&enl=7";
 }elsif($raggio == '50'){
 $queryString = $queryString."?&enl=8";
 }elsif($raggio == '100'){
 $queryString = $queryString."?&enl=9";
 }else{
 die "Formato raggio non corretto. Inserire '25' '50' o '100'";
 }
}
print "Query string pronta.\n";
$pageNumber = 1;
##########################################################################################################
######################## Calcolo il numero di pagina da visualizzare #####################################
##########################################################################################################
for($i=1;$i<=$pageNumber;$i++){
$response = $ua->get($queryString);
 print "Scaricata la pagina $queryString di dimensione ".length($response->decoded_content)." bytes\n";
unless($response->is_success) {
 print "\nErrore nello scaricamento file HTML: " . $response->status_line."\n";
 }
$fileOut = "result-$i.html";
unless(open OUT, '>' . $fileOut) {
 die "\nNon è stato possibile creare il file '$fileOut'\n";
 }
print "Creato il file $fileOut\n";
# Setto la codifica
binmode(OUT, ":utf8");
print OUT $response->decoded_content;
close OUT;
$fileIn = "result-$i.html";
open(IN,$fileIn);
@contenuto=<IN>;
##########################################################################################################
######################## Verifico il numero di risultati trovati e lo memorizzo ##########################
##########################################################################################################
if($i==1){
 foreach (@contenuto){
 if ($_ =~/<span class="h-bold">(\d+)<\/span>/){
 $resultNumber= $1;
 print "Trovati $resultNumber risultati.\n";
 break; 
 }
 }
}
$pageNumber = $resultNumber/50;
$quote = $pageNumber/int($pageNumber);
if($quote!=1){
 $pageNumber = sprintf("%d", $pageNumber)+1;
}
foreach (@contenuto)
{
chomp ($_);
 if($_=~/<a title=\"Scheda Azienda (.+)\" class="_lms _noc"/)
 {
 $ragione_sociale = $1;
 $ragione_sociale =~ s/\&amp\;/\&/g;
 }
 elsif($_=~/\<span class\=\"street-address\"\>(.+)\, ([\w|\.|\s]+).+ class="locality">(\d\d\d\d\d) ([\w|\.|\s]+) \((\w\w)\)<\/span>/)
 {
 $civico = $1;
 $indirizzo = $2;
 $cap = $3;
 $citta = $4;
 $provincia = $5;
 }
 elsif($_=~/<div class="address">/){
 $inizio = 1;
 }
 elsif($inizio==1 && $_=~/<span class\=\"type\"> tel\:<\/span>/){
 $tel = 1;
 }
 elsif($inizio==1 && $_=~/^<span class=\"type\"> fax\:<\/span>/){
 $fax = 1;
 }
 elsif($tel==1 && (($_=~/^<span class="value">([\d|\s]+), ([\d|\s]+)<\/span>/) || ($_=~/<span class="value">([\d|\s]+)<\/span>/)) ){
 $tel1 = $1;
 $tel2 = $2;
 $tel = 0;
 }
 elsif($fax==1 && $_=~/^<span class="value">([\d|\s]+)<\/span>/ ){
 $fax1 = $1;
 $fax = 0;
 }
 elsif($inizio==1 && $_=~/<\/div>/ ){
 $inizio = 0;
 print DATI "$ragione_sociale,$indirizzo,$cap,$citta,$provincia,$tel1,$tel2,$fax1\n";
 }
}
close(IN);
#Ogni pagina visitata, setto la nuova pagina da visitare
$queryString =~ s/p-(\d*)/p-$i/;
}
close (DATI);