Télécharger
Noter:

Ajouté le 2021-12-08
Visionné 9729 fois
5/5 (1)

Scraper une page web en PHP

Description

Pour récupérer ou scraper (scraping, en Anglais) les liens d'une page internet, le code PHP prend toutes les URL et les sauvegarde dans un fichier .txt


Deux versions pour crawler, scraper ou sniffer une page


//mettez ici l’URL à scraper
$url='https://www.c2script.com/scripts/recuperer-les-liens-d-une-page-web-en-php-s19.html';

//on va lire la page à copier, on initialise cURL
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

//pour retourner le contenu
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//au cas où l'uRL est en https
if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}

//on simule un faux USER_AGENT pour faire croire qu'on est humain (sinon certains sites peuvent bloquer l'accès en mettant une erreur 403 Forbidden)
$userAgent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201';
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);

//on vérifie s'il ya pas d'erreur et on récupère le résultat
if(!$data = curl_exec($ch))
exit("Erreur cURL : " . curl_error($ch));


//notre preg_split prend tous les liens du type http*, [a-z0-9_./?&;=-] sert à prendre tout dans L'URL, même si il y a des var1=1&var2=..., et vue qu'on accepte pas les ' ni ", preg_split s’arrêtera à la fin du lien qui est dans la balise <a href="ici">
$ex=preg_split("#(https?://[\w./?&%:;=-]+)#i",$data,null,PREG_SPLIT_DELIM_CAPTURE);

//on mettra tous les liens dans cette variable
$liensdelapage='';
// pour ne pas les dupliquer, on enregistre les liens dans un array qu'on vérifiera si il existe déjà
$lesLiens=[];

foreach($ex as $liens){
//si c'est bien une URL que preg_split à capturer, on le met dans le fichier txt
if(substr($liens,0,4)=='http'){
//si on la pas déjà mis dans le txt
if(!in_array($liens,$lesLiens)){
$liensdelapage.=$liens."\n";
//pour ne pas l'enregistrer une deuxième fois, on l'enregistre dans le tableau
$lesLiens[]=$liens;
}
}
}

//en fin, on ferme cURL
curl_close($ch);

//et on sauvegarde les liens dans le fichier liens.txt
file_put_contents("liens.txt",$liensdelapage);
echo "ok";
//le dossier à scanner
$dossier="./dossier";
$scan=scandir($dossier);

foreach($scan as $fichier){

//si c'est un fichier, on le scanne
if(is_file($dossier.'/'.$fichier)){

//nom du fichier qu'on va créer en mettant les liens à l'intérieur
$nom_fichier=$fichier;

//lit la page à scraper
$fichier=file_get_contents($dossier.'/'.$fichier);

//coupe le début du lien et le place dans un tableau
$ex=explode("href=",$fichier);

//notre retour (les liens de la page qu'on sauvera dans le txt)
$liensdelapage='';

//on explore tous les liens
$i=0;
foreach($ex as $lien){
$i++;
//le premier index de $ex est avant le premier http, il y a rien
if($i>1){

//on récupère le lien contenu dans les doubles ou simple guillemet de l'attribut href
$lien=preg_replace("#(?:'|\")(https?://[\w./?&%:;=-]+)(?:'|\")(.+)#is","$1",$lien);

//on retourne le lien en faisant un saut de ligne pour placer la prochaine url en dessous
//remarque: le saut de ligne fonctionne seulement avec les double guillemets et ne fonctionnera pas avec des simple, ex : '\n'
$liensdelapage.=$lien."\n";

}
}

//en fin on colle les liens dans un fichier texte avec le même nom que la page qui vient d'être scannée
file_put_contents($dossier.'/'.$nom_fichier.".txt",$liensdelapage);
echo "ok, fichier $nom_fichier.txt créé<br/>";

}
}



Besoin de travaux pour votre site ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter
Pas encore de commentaire, soyez le premier !

Retour à la liste des scripts