Télécharger
Noter:

Ajouté le 30/10/2015
Visionné 7599 fois
5/5

Récuperer les liens d'une page web en PHP

Description

Mise à jour: 31/03/2020
Pour récupérer les liens d'une page internet, ce code php prend toutes les URL et les sauvegarde dans un fichier .txt

Il se peut que vous ayez l'erreur suivante lors de l'exécution de cette fonction:

Warning: fopen(L'URL...): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /chemin/vers/le/script.php on line [nombre]

Malheureusement j'ai pas réussi à trouver pourquoi, je soupçonne le serveur distant d'avoir une protection contre ce genre de script, un pare-feu ?
Si vous des sources concernant cette erreur et comment la solutionner, mettez la en commentaire svp!
Je travail actuellement sur un nouveau type de code qui utilise cURL plutôt que file_get_contents

Deux versions pour "sniffer une page"


//version avec l'url directement:
$urlavoir='https://www.c2script.com/scripts/recuperer-les-liens-d-une-page-web-en-php-s19.html';// mettez ici l'url
$fichier=file_get_contents($urlavoir);//lit la page à copier
//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êtra à la fin du lien qui est dans la balise <a href="ici">
$ex=preg_split("#(https?://[a-z0-9-_./?&%:;=]+)#i",$fichier,null,PREG_SPLIT_DELIM_CAPTURE);
$liensdelapage="";
$lesLiens=array();//on va enregistrer les liens qu'on met dans le txt pour ne pas remettre le même
foreach($ex as $liens){
if(preg_match("#^http#i",$liens)){//si c'est bien que preg_split à capturer, on le met dans le fichier txt
if(!in_array($liens,$lesLiens)){//si on la pas déjà mis dans le txt, on l'enregistre
$liensdelapage.=$liens."\n";
$lesLiens[]=$liens;//pour ne pas l'enregistrer une deuxième fois
}
}
}
file_put_contents("liens.txt",$liensdelapage);//sauvegarde les liens dans le fichier liens.txt
echo "ok";


$scan=scandir("./");//le dossier à scanner
foreach($scan as $fichier){
if(is_file($fichier)){
$fichier=file_get_contents($fichier);//lit la page à copier
$ex=explode("href=",$fichier);//coupe le début du lien et le place dans un tableau
$liensdelapage="";//notre retour (les liens de la page)
foreach($ex as $liens){//on explore tous les liens

//si le lien est entouré avec un guillemet double:
$ex2=explode('"',$liens);//on s'arrête au guillemet ", soit la fin de la balise href=""
$url='';//initialisation de la variable
$url=(substr($ex2[0],0,1)=='"' OR substr($ex2[0],0,1)=="'")?substr($ex2[0],1):$ex2[0];//enlève le " ou ' du début car on à pris à partir de = pour être sûr de prendre tous les liens (href=)
$url=substr($url,-1,1)=="/"?substr($url,0,-1):$url;//on supprime le slash de la fin si il y en a un
$liensdelapage.=$url."\n";//puis on retourne le lien en faisant un saut de ligne pour placer la prochaine url en dessous

//si le lien est entouré avec un guillemet simple:
$ex2=explode("'",$liens);//on s'arrête au guillemet ", soit la fin de la balise href=""
$url='';//initialisation de la variable
$url=(substr($ex2[0],0,1)=='"' OR substr($ex2[0],0,1)=="'")?substr($ex2[0],1):$ex2[0];//enlève le " ou ' du début car on à pris à partir de = pour être sûr de prendre tous les liens (href=)
$url=substr($url,-1,1)=="/"?substr($url,0,-1):$url;//on supprime le slash de la fin si il y en a un
$liensdelapage.=$url."\n";//puis on retourne le lien en faisant un saut de ligne pour placer la prochaine url en dessous

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

Commentaires

Pas encore de commentaire ajouté, soyez le premier!

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo1

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter