Bientôt noël, voici un cadeau pour les lecteurs de reporting business qui travaillent dans le marketing et plus particulièrement pour celles et ceux chargés de la prospection commerciale.
Toutes les personnes travaillant dans l’internet vous le diront, les emails sont le nerfs de la guerre. Vous pourrez lancer plus facilement une nouvelle fonctionnalité, un nouveau produit, un nouveau site si vous pouvez faire de l’emailing ciblé mais en quantité.
[php_books_amazon]
Récupérer des adresses mails opt-in coûte cher, très cher lorsqu’il s’agit de segments bien spécifiques. L’opt-in pour ceux qui ne seraient pas au courant signifie que l’utilisateur est d’accord pour recevoir des propositions commerciales ou pour que le site récupérant l’adresse mail puisse commercialiser (donc revendre) cette adresses à d’autres entités commerciales.
Même si les réseaux sociaux sont partout, contacter directement quelqu’un par email permettra de le toucher de façon plus efficace. Il n’est pas question d’emails opt-in ici, désolé de vous décevoir.
Comme traité dans cet article déjà publié sur le site, il existe des moyens pour récupérer des adresses emails directement depuis les sites internet. Certains de ces outils sont payants, des technologies spécifiques sont déployées pour littéralement « craler » ou « scraper » un site internet et récupérer les informations qui vous intéressent.
Le script ci dessous est écrit en php et provient du site the digilife. Sa mécanique de fonctionnement pour résumer est la suivante: le script va partir d’une URL que vous allez saisir. Depuis cette URL de départ qui fait office d’url d’initialisation, le script va aller récupérer tout le contenu de la page en question, s’il existe des adresses mails, il va les ajouter automatiquement dans une table, il va extraire tous les liens hypertexte présents sur la page html, nettoyer ces liens et les ajouter dans une table d’URL à traiter pour le script. Une fois que la page est traitée, son url est écrite dans une table récapitulant toutes les URL déjà traitées et elle est effacée de la table des URL « à traiter ».
Il s’agit d’un robot crawler qui fonctionne parfaitement pour l’avoir testé. Il y a une fonction à modifier, celle concernant les extensions. Vous pourrez ajouter de nouvelles règles pour personnaliser ce script.
Son gros avantage est que le script, une fois lancé, continue de crawler presque infiniment en fonction des nouvelles URL trouvées. A vous ou à votre service IT de bien personnaliser ce script pour vous éviter de crawler tout le site d’Amazon ou l’intégralité des profils Facebook.
Le script en question se découpe en 3 sous-modules: un script qui est en fait une class php, un petit script pour permettre de créer les tables qui viendront enregistrer les emails et les URL dans votre base de données ainsi qu’un autre script qui sera lui à lancer pour l’exécution du script.
emailcrawler.php
/*
Email address scraper based on a URL.
*/class scraper
{
// URL that stores first URL to start
var $startURL;
// List of allowed page extensions
var $allowedExtensions = array('.css','.xml','.rss','.ico','.js','.gif','.jpg','.jpeg','.png','.bmp','.wmv'
,'.avi','.mp3','.flash','.swf','.css');
// Which URL to scrape
var $useURL;
// Start path, for links that are relative
var $startPath;
// Set start path
function setStartPath($path = NULL){
if($path != NULL)
{
$this->startPath = $path;
} else {
$temp = explode('/',$this->startURL);
$this->startPath = $temp[0].'//'.$temp[2];
}
}
// Add the start URL
function startURL($theURL){
// Set start URL
$this->startURL = $theURL;
}
// Function to get URL contents
function getContents($url)
{
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,7);
curl_setopt($ch, CURLOPT_REFERER, 'http://'.$this->useURL);
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 50); // times out after 50s
curl_setopt($ch, CURLOPT_POST, 0); // set POST method
$buffer = curl_exec($ch); // run the whole process
curl_close($ch);
return $buffer;
}
// Actually do the URLS
function startScraping()
{
// Get page content
$pageContent = $this->getContents($this->startURL);
echo 'Scraping URL: '.$this->startURL.PHP_EOL;
// Get list of all emails on page
preg_match_all('/([\w+\.]*\w+@[\w+\.]*\w+[\w+\-\w+]*\.\w+)/is',$pageContent,$results);
// Add the email to the email list array
$insertCount=0;
foreach($results[1] as $curEmail)
{
$insert = mysql_query("INSERT INTO `emaillist` (`emailadd`) VALUES ('$curEmail')");
if($insert){$insertCount++;}
}
echo 'Emails found: '.number_format($insertCount).PHP_EOL;
// Mark the page done
$insert = mysql_query("INSERT INTO `finishedurls` (`urlname`) VALUES ('".$this->startURL."')");
// Get list of new page URLS is emails were found on previous page
preg_match_all('/href="([^"]+)"/Umis',$pageContent,$results);
$currentList = $this->cleanListURLs($results[1]);
$insertURLCount=0;
// Add the list to the array
foreach($currentList as $curURL)
{
$insert = mysql_query("INSERT INTO `workingurls` (`urlname`) VALUES ('$curURL')");
if($insert){$insertURLCount++;}
}
echo 'URLs found: '.number_format($insertURLCount).PHP_EOL;
$getURL = mysql_fetch_assoc(mysql_query("SELECT `urlname` FROM `workingurls` ORDER BY RAND() LIMIT 1"));
$remove = mysql_query("DELETE FROM `workingurls` WHERE `urlname`='$getURL[urlname]' LIMIT 1");
// Get the new page ready
$this->startURL = $getURL['urlname'];
$this->setStartPath();
// If no more pages, return
if($this->startURL == NULL){ return;}
// Clean vars
unset($results,$pageContent);
// If more pages, loop again
$this->startScraping();
}
// Function to clean input URLS
function cleanListURLs($linkList)
{
foreach($linkList as $sub => $url)
{
// Check if only 1 character - there must exist at least / character
if(strlen($url) allowedExtensions,'',$url,$count);
if($count > 0){ unset($linkList[$sub]);}
// If URL starts with #, ignore
if(substr($url,0,1) == '#'){unset($linkList[$sub]);}
// If everything is OK and path is relative, add starting path
if(substr($url,0,1) == '/' || substr($url,0,1) == '?' || substr($url,0,1) == '='){
$linkList[$sub] = $this->startPath.$url;
}
}
return $linkList;
}
}
création des tables nécessaires à l’execution du crawl
CREATE TABLE IF NOT EXISTS `emaillist` (
`emailadd` varchar(255) NOT NULL,
PRIMARY KEY (`emailadd`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all gotten emails';
CREATE TABLE IF NOT EXISTS `finishedurls` (
`urlname` varchar(255) NOT NULL,
PRIMARY KEY (`urlname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of finished urls';
CREATE TABLE IF NOT EXISTS `workingurls` (
`urlname` varchar(255) NOT NULL,
PRIMARY KEY (`urlname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of current working urls';
execute.php -> permet l’execution du script
setStartPath();
//$new->setStartPath('http://geekiest.net');
$new->startURL('http://geekiest.net/beautifulmails/');
$new->startScraping();
?>
Vous pourrez ainsi facilement récupérer plusieurs milliers d’adresses email en toute simplicité directement depuis le net.
Bonjour,
Merci pour les scripts
Je suis novice en la matière, comment doit on faire pour les faire fonctionner ?
Faut il un hébergement particulier ?
Au plaisir de vous lire.
bonjour christophe, pour faire fonctionner les scripts, il suffit d’un simple serveur avec php installé. Tu peux même le faire tourner en local avec des solutions comme Wamp. Je pense que tu peux trouver des tutoriaux sur le siteduzero.
De rien ;)
a+