Télécharger
Noter:

Ajouté le 2015-10-30
Visionné 8625 fois
5/5 (1)

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 avez des informations 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";
}
}

Besoin de travaux pour votre site ?

Je suis là pour vous aider !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom *
Email *
Message *
Captcha *
memo1
Commenter

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

Pas encore de commentaire, soyez le premier!

Retour à la liste des scripts