SEP
26
PHP RegEx analyser les URL d'une page
26.09.2007 | | Auteur : Ayashi | Catégorie : Programmation
Les expressions régulières sont extrêmement puissantes et permettent de réaliser du filtrage de chaine en très peu de lignes de code. Dans cet article nous allons réaliser un script qui télécharge une page web et liste toutes les URL qu'elle contient.

Ce genre de script peut être utile pour créer un robot qui parse des pages web et cherche les liens internes ou externes au site. Il faut dans ce cas stocker dans une base de données les résultats pour pouvoir les traiter ultérieurement.

Pour réaliser ce script nous allons utiliser deux fonctions php : ereg et preg_match_all. ereg va nous permettre de décortiquer l'adresse internet de la page à télécharger afin d'extraire :
  • Le protocole utilisé ( http, https )
  • Le nom du serveur web ( www.google.com )
  • Les éventuels répertoires ( /MyPage/blabla/ )
Le script PHP-CLI ( voir l'article PHP-CLI Command Line Interface ) que je vous propose s'exécute depuis la ligne de commande. Il accepte en argument l'URL de la page à télécharger puis à analyser.

Voici l'expression régulière utilisée :
Si on test avec l'URL http://fr.wikipedia.org/wiki/Expressions_rationnelles nous obtenons le découpage :

Array
(
    [0] => http://fr.wikipedia.org/wiki/
    [1] => http://
    [2] => fr.wikipedia.org
    [3] => /wiki/
)

..Ceci nous permettra de reconstruire par la suite les adresse internes au site et obtenir une URL complète. Regardons maintenant comment se fait la recherche des liens dans la page web. Nous allons cette fois ci utiliser la fonction preg_match_all qui va nous permettre de rechercher plusieurs occurences dans le code source de la page. L'expression régulière utilisée est la suivante :
Cette expression va rechercher toutes les chaines commençant par <a href = ( indépendamment des espaces et de la casse ), extraire la valeur entre quotes ou double quotes ( ' ou " ) et ne reprendre qu'après la fin de cette balise ( > ). Les résultats seront stockés dans un array à deux dimensions remplis par la fonction preg_match_all. Les liens sont ensuites analysés afin de déterminer si ils ont absolus ou relatifs. Si ils sont relatifs, le script les reconstruits avec les informations retirées avec ereg : Un petit test permet aussi de supprimer les mailto:, javascript:, telnet: qui ne sont pas intéréssant pour nous! Le script en action :

Z:\>php -q ParseLinks.php http://meteo.app.intra/Home.php

  http://meteo.app.intra/DL.php?Kind=TempAir&StationID=&TF=24h
  http://meteo.app.intra/DL.php?Kind=TempAir&StationID=&TF=7d
  http://meteo.app.intra/DL.php?Kind=TempAir&StationID=&TF=30d
  http://meteo.app.intra/DL.php?Kind=Pressure&StationID=&TF=24h
  http://meteo.app.intra/DL.php?Kind=Pressure&StationID=&TF=7d
  http://meteo.app.intra/DL.php?Kind=Pressure&StationID=&TF=30d
  http://meteo.app.intra/DL.php?Kind=Humidy&StationID=&TF=24h
  http://meteo.app.intra/DL.php?Kind=Humidy&StationID=&TF=7d
  http://meteo.app.intra/DL.php?Kind=Humidy&StationID=&TF=30d
  http://www.google.com

..et le code source :
Tags : php, regex, parse, link | Digg!
Commentaires  | Ajouter un commentaire
Merlin
29.03.08 / 2:48
Comme toujours, article excellent ! Il faudra que je teste ton script :)
Rechercher sur internet  ?  | Rechercher!
Trackback
Utilisez le lien http://www.sunyday.net/trackback-PHP-RegEx-parsers-les-URL-d-une-page pour faire un trackback vers cette article depuis votre site web. Les trackbacks sont soumis à une approbation mutuelle et susceptibles d'être supprimés si jugés indésirables.
Retrieve RSS feed. Get notified by eMail. Meteo Parser.
Computing widgets...
Jean-Damien POGOLOTTI© 2k6-2k7 | Design // Code

Qui suis-je?

Touche à tout restant bouche bée devant la complexité et la cohérence de ce monde je m'évertue à essayer d'en comprendre les rouages. En passant par la météorologie, la physique ou bien l'informatique, tout est une raison d'apprendre!
Comment les gens arrivent-il ici?
 des  javascript  un  gps  en  authentification  du  mercator  synop  html  et  d%27ozone  dans  +  regex  ldap  la  fading  module  Cannot  pour  line  web  CODE  ad  coordonn%C3%A9es  le  directory  google  photovoltaique  ajax  map  latitude  couche  resize  script  metar  explication  trou  command  protocole  php  champ  les  longitude  magn%C3%A9tique  regexp  convertir  browser  lldp  active  conversion  SUR  COMMENT  terrestre  anomalie  cli  une  image  ntfs  snmp  url  adresse  fade  PAGE  find  nuls  sunyday  de  gd  

Sunyday.net