Bonjour,
Un ami avait besoin d'un script afin de récupérer des éléments d'une page web ( ici une liste d'entreprises d'un technopark ) alors autant le partager avec tout le monde
Évidemment, quand on récupère des éléments tirés d'une page web, il faut toujours citer la source !
Objectif : Récupérer des informations sur toutes les entreprises du listingsous la forme :
Première étape : A propos de l'adresse de la pageNom
Tel :
Fax :
Email :
Site Web :
Pour accéder à la fiche d'une entreprise, on clique sur le lien correspondant. Une nouvelle fenêtre s'affiche et donne toutes les informations souhaitées sur l'entreprise en question.
Mais comment connaître l'adresse de cette page ? En utilisant l'historique du navigateur tout simplement...
Une première constatation est que la fiche de chaque entreprise est obtenue grâce à une adresse qui a cette forme :
On crée donc une page php de test :
<?php
$adresse = "http://www.casablanca-technopark.ma/showets.asp?ID=56"; // adresse de la page à exploiter
echo "$adresse <br>"; // afficher l'adresse
$page = file_get_contents ($adresse); // récupérer le contenu de la page
echo $page ; // afficher la page
?>
Néanmoins, le résultat est loin d'être satisfaisant :
Ce n'est donc pas la bonne adresse à utiliser. En cliquant sur Affichage > Source du navigateur, on peut constater l'existence d'iframes et on retiendra surtout la ligne suivante :La page est introuvable
Bingo ! On essaye donc avec une nouvelle adresse :<iframe name="liste" src="detail_ese.asp?ID=56" width="340" height="260" frameborder="0">
$adresse = "http://www.casablanca-technopark.ma/detail_ese.asp?ID=56
Et ça marche bien :
Deuxième étape : Récupération des donnéeshttp://www.casablanca-technopark.ma/det ... .asp?ID=56
ABNET
Télécommunication
Internet, Réseaux, et télécommunications
Tel : 022 21 77 18
Fax : 022 21 77 18
Email : [email protected]
Site Web : www.abnet.ma
Maintenant qu'on sait comment accéder aux données, il est temps de les récupérer
Pour cela, le principe est simple :
ID représente l'identifiant de la société. Un webmaster logique devrait l'affecter dans l'ordre aux entreprises (de 0 ou 1 jusqu'à N). Reste à savoir combien exactement.
Pour cela on essaiera successivement dans le navigateur les adresses :
Conclusion : Les ID des entreprises vont - actuellement - de 1 à 140.http://www.casablanca-technopark.ma/detail_ese.asp?ID=0 --> Erreur !
http://www.casablanca-technopark.ma/detail_ese.asp?ID=1 --> OK
http://www.casablanca-technopark.ma/det ... sp?ID=1000 --> Erreur !
http://www.casablanca-technopark.ma/det ... asp?ID=500 --> Erreur !
http://www.casablanca-technopark.ma/det ... asp?ID=200 --> Erreur !
Et ainsi de suite...
Il s'agira maintenant de récupérer les données correspondants à chaque ID. Pour cela, on créera la boucle suivante (qui parcoure les fiches de ID=1 jusqu'à ID=140) :
<?php
$id = 1 ;
while ($id < 141) {
$adresse = "http://www.casablanca-technopark.ma/detail_ese.asp?ID=$id" ; // adresse de la page à exploiter
$page = @file_get_contents ($adresse); // récupérer le contenu de la page
echo "$page <br>"; // affiche la page
$id++ ; // $id = $id + 1
}
?>
Toutefois, le temps d'exécution étant trop long, et pour les besoins du tutoriel, on se limitera aux 5 dernières entreprises :
<?php
$id = 135 ;
while ($id < 141) {
$adresse = "http://www.casablanca-technopark.ma/detail_ese.asp?ID=$id" ; // adresse de la page à exploiter
$page = @file_get_contents ($adresse); // récupérer le contenu de la page
echo "$page <br>"; // affiche la page
$id++ ; // $id = $id + 1
}
?>
Reste maintenant à sélectionner les éléments les plus intéressants des pages en question :
Pour cela, on utilisera la fonction enregi pour sélectionner les parties voulues de $page et les stocker dans $nom.Nom
Tel :
Fax :
Email :
Site Web :
Ainsi, on cherche d'abord à récupérer le nom de la société :
On tape dans le navigateur par exemple de la page http://www.casablanca-technopark.ma/det ... asp?ID=140
Puis on affiche la source de la page.
On remarque que la ligne qui contient le nom de la société est :
<td width="100%" bgcolor="#FFFFFF"><font size="-1"><b><img border="0" src="logos/" align="right" width="118" height="64">Rekrute.com</b></font></td>
Ainsi, la syntaxe d'enregi sera :
eregi('height="64">(.*)</b></font></td>',$page,$nom); // récupère ce qu'il y a entre [b]height="64">[/b] et [b]</b></font></td>[/b]
Pour ce qui est des autres éléments (tel, fax...) on les récupérera en un bloc (merci au webmaster qui s'est déjà occupé de la mise en page !)Notre code ressemblera donc à :
<?php
$id = 135 ;
while ($id < 141) {
$adresse = "http://www.casablanca-technopark.ma/detail_ese.asp?ID=$id" ; // adresse de la page à exploiter
$page = @file_get_contents ($adresse); // récupérér le contenu de la page
$titre = @eregi('height="64">(.*)</b></font></td>',$page,$nom); // récupère le nom de la société
echo "$nom[1] <BR>" ;
$titre = @eregi('<b>Tel :</b>(.*)</td>',$page,$tel); // récupère le tél et les autres infos
echo "<b>Tel :</b> $tel[1] <BR><BR>" ;
$id++ ;
}
?>
Vous remarquerez que j'ai ajouté des @ apres m'etre assuré que le code fonctionnait bien. Je n'utilise pas cette astuce d'habitude, mais comme certains ID n'existent pas, cela évite l'affichage de l'erreur :
Ainsi, le resultat final ressemlera à ceci :Warning: file_get_contents(http://www.casablanca-technopark.ma/det ... asp?ID=116): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal
Il est possible de stocker ces elements dans une base de données, un fichier ou autres. Ce n'est pas difficile si vous avez les bonnes bases de travail (notmmant www.commentcamarche.com et www.phpdebutant.org )PROMACT
Tel : +212 (0) 22 87 4000
Fax : +212 (0) 22 87 4000
Email : **[email protected]
Site Web : www.promact.ma
INDUSAC
Tel :
Fax :
Email :
Site Web :
Rekrute.com
Tel : 065917502
Fax :
Email : **[email protected]
Site Web : www.ReKrute.com
Voilà, je suis conscient que ce n'est pas l'exemple le plus simple pour aborder les récupérations d'éléments de pages web ; mais cela permet au moins de présenter certaines astuces notamment au niveau des adresses des pages !
A bientôt peut être,
HD