1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
| <?php
//URL à crawler
$url = 'http://MON-URL/';
//déclaration de la fonction de crawl
function crawl($url)
{
//initialisation de curl
$ch = curl_init($url);
//création d'un fichier texte pour stocker le contenu crawlé
//effacement du fichier précédent si existe
if(file_exists('fichier_html_brut'))
{
unlink('fichier_html_brut');
}
$fp_fichier_html_brut = fopen('fichier_html_brut', 'a');
//définition des paramètres curl
//1 redirection de l'output dans le fichier txt
curl_setopt($ch, CURLOPT_FILE, $fp_fichier_html_brut);
//2 on spécifie d'ignorer les headers HTTP
curl_setopt($ch, CURLOPT_HEADER, 0);
//exécution de curl
curl_exec($ch);
//fermeture de la session curl
curl_close($ch);
//fermeture du fichier texte
fclose($fp_fichier_html_brut);
//passage du contenu du fichier à une variable pour analyse
$html_brut = file_get_contents('fichier_html_brut');
//extraction du contenu souhaité '...'
preg_match_all('%<div class="illus">(.*)</div>%Us', $html_brut, $adresses_mail);
//creation d'un fichier pour recevoir le contenu souhaité
$fp_fichier_emails = fopen('fichier_mails', 'a');
//on creer une boucle pour placer tous le contenu souhaité de la page dans le même fichier
foreach ($adresses_mail[0] as $element)
{
//on "nettoie" le contenu souhaité grâçe à l'utilisation de signes (dans le cas present : %)
// on selectionne avec '%la selection-souhaité%' et on remplace avec 'selection-remplacé'
$element = preg_replace('%<div class="illus">%', '', $element);
$element = preg_replace('%</div>%', '', $element);
$element = preg_replace('%<img height="100" width="100" alt="%', '', $element);
$element = preg_replace('%src="/imgs/produits/%', '', $element);
$element = preg_replace('%.jpg"%', '', $element);
$element = preg_replace('%/>%', '', $element);
$element = preg_replace('%,%', '', $element);
$element = preg_replace('%"%', '', $element);
$element = preg_replace('%'%', '#', $element);$element = preg_replace('%-%', '', $element);
//on ajoute un retour chariot en fin de ligne pour avoir contenu souhaité par ligne
$element .= "\n";
fputs($fp_fichier_emails, $element);
}
fclose($fp_fichier_emails);
//extraction des liens
preg_match_all('#"/?[a-zA-Z0-9_./-]+\.(php|html|htm)"#', $html_brut, $liens_extraits);
//si le fichier contenant les liens existe déjà
if (file_exists('liens_a_suivre'))
{
//on l'ouvre
$fp_fichier_liens = fopen('liens_a_suivre', 'a');
//on créé une boucle pour enregistrer tous les liens ds le fichier
foreach ($liens_extraits[0] as $element)
{
//on recharge le contenu dans la variable à chaque tour de boucle
//pour être à jour si le lien est present +sieurs x sur la même page
$gestion_doublons = file_get_contents('liens_a_suivre');
//on nettoie les liens
$element = preg_replace('#"#', '', $element);
$follow_url = $element;
$follow_url .= "\n";
//creation d'un pattern pour la verification ds doublons
$pattern = '#'.$follow_url.'#';
//on verifie grace au pattern précédemment créé
//que le lien qu'on vient de capturer n'est pas déjà ds le fichier
if (!preg_match($pattern, $gestion_doublons))
{
fputs($fp_fichier_liens, $follow_url);
}
}
}
//si le fichier contenant les liens n'existe pas
else
{
//on le créé
$fp_fichier_liens = fopen('liens_a_suivre', 'a');
//puis on fait une boucle pour enregistrer tous les liens dans le même fichier
foreach ($liens_extraits[0] as $element)
{
$element = preg_replace('#"#', '', $element);
$follow_url = $element;
$follow_url .= "\n";
fputs($fp_fichier_liens, $follow_url);
}
}
//fermeture fu fichier contenant les liens
fclose($fp_fichier_liens);
}
//on appelle une première fois la fonction avec l'url racine
crawl($url);
//ensuite on ouvre le fichier de liens pour visiter les autres pages du site
$lire_autres_pages = fopen('liens_a_suivre', 'r');
//on créé une boucle pour visiter chacun des liens
//on stop cette boucle quand le curseur arrive à la fin du fichier
$numero_de_ligne = 1;
while(!feof($lire_autres_pages))
{
//curl ne comprend que les liens absolus
//on formate donc nos liens relatifs en liens absolus
$page_suivante = $url;
$page_suivante .= fgets($lire_autres_pages);
echo $numero_de_ligne . ' Analyse en cours, page : ' . $page_suivante;
$numero_de_ligne++;
//on se contente de rappeler la fonction crawl avec nos nouveaux liens
crawl($page_suivante);
}
fclose ($lire_autres_pages);
?> |
Partager