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
manuel laser
29.06.09 / 7:14
Just to let you know that the script works fine.Erase my last comment (wasn't really that smart).Thanks
manuel laser
27.06.09 / 9:03
Le Regex est simplement fantastique!Je ne comprend pas ça: $URL = $argv[1]; Je peux utilizer $URL=
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?
 CODE  find  html  et  www.sunyday.net  ajax  gps  ldap  map  de  la  line  latitude  photovoltaique  explication  script  regexp  url  protocole  authentification  convertisseur  metar  regex  synop  terrestre  sunyday.net  snmp  convertir  php  sunyday  coordonn%C3%A9es  SUR  mercator  fading  directory  des  ntfs  active  longitude  ad  les  image  d%27ozone  nuls  browser  dans  menu  resize  trou  couche  lldp  une  PAGE  web  un  fade  cli  conversion  anim%C3%A9  javascript  adresse  +  module  le  google  avec  en  pour  magn%C3%A9tique  champ  

Sunyday.net