Prendre des captures de site web périodiquement

J'ai cet après midi codé un script bash permettant de prendre des captures de site web à intervalles régulières. Cela permet entre autre d'avoir un historique de l'indisponibilité de son site web.

Fonctionnement

Le script en question prend 3 paramètres : l'adresse de la page à "shoter", la période en seconde et enfin le dossier de sauvegarde des shots. Il enregistre les fichiers sous format HTML en prenant soin de changer les urls relatives. Ce dernier n'est pas forcément fonctionnel dans tout les cas, il faudra alors adapter le script. Si deux shots sont identiques, le dernier n'est pas enregistré. Enfin, les fichiers sont suffixés avec la date et l'heure afin de pouvoir savoir à quelle heure le site était en maintenance ou indisponible.

Code source

Voici donc le code source :

  1. #!/bin/bash
  2.  
  3. # This script take periodicaly snapshot of a website
  4.  
  5. # Copyright (C) 2010 de Flotte Maxence
  6. #
  7. # This program is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 3 of the License.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # A copy of the GNU General Public License is available here : http://www.gnu.org/licenses/gpl-3.0.html
  17.  
  18. action="saved at `date`"
  19.  
  20. # Check if there are all parameters
  21.  
  22. if [ $# -ne 3 ]
  23. then
  24. echo "/!\ Parameters are wrong"
  25. echo "Websnap need three parameters : website url, period in seconds beetween each shot and the directory for saving snapshots"
  26. echo "For example : sh websnap.sh http://google.fr 3600 ~/google-snap/"
  27. exit
  28. fi
  29.  
  30. website=$1
  31. period=$2
  32. directory=$3
  33.  
  34. while [ 1 ]; do
  35. # Increase de counter
  36. snapCounter=$(( snapCounter + 1))
  37. # Generate a filename by using date and counter
  38. fileName="snap.`date +%Y.%m.%d.%H.%M`.$snapCounter.html"
  39.  
  40. # Get a new snap
  41. wget $website -O $directory/$fileName -nv
  42.  
  43. # Change relative path to absolute
  44. # URL started by "/ (ex src="/...")
  45. sed 's#"/#"'"$website"'/#;' $directory/$fileName > $directory/$fileName.tmp.html
  46. mv $directory/$fileName.tmp.html $directory/$fileName
  47.  
  48. # URL started by (/ (ex: url(/...))
  49. sed 's#(/#('"$website"'/#;' $directory/$fileName > $directory/$fileName.tmp.html
  50. mv $directory/$fileName.tmp.html $directory/$fileName
  51.  
  52. # URL started by "./ (ex: src="./...")
  53. sed 's#"./#"'"$website"'/#;' $directory/$fileName > $directory/$fileName.tmp.html
  54. mv $directory/$fileName.tmp.html $directory/$fileName
  55.  
  56. # Check if the website has change or not. If not, removed the shot
  57. if [ $snapCounter -gt 1 ]
  58. then
  59. diff=`diff $directory/$fileName $directory/$previousFileName`
  60. if [ "$diff" = "" ]
  61. then
  62. # The snapshoot is the same of the last taken.
  63. action="no differences between the new and the last shot"
  64. rm $directory$fileName
  65. else
  66. action="saved at" date
  67. previousFileName=$fileName
  68. fi
  69. else
  70. previousFileName=$fileName
  71. fi
  72.  
  73. echo Snapshot number $snapCounter of $website: $action
  74. sleep $period
  75. done;

Utilisation

Pour utiliser ce script rien de plus simple :

  1. sh ./websnap.sh http://perdu.com 900 ~/snap

Ici, on prend une catpure du site http://perdu.com toute le 15 minutes qui est enregistré dans le dossier snap/ de votre répertoire /home/.

Téléchargement

Vous pouvez télécharger websnap ici

 

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

À propos

Photographie

Maxence de Flotte

Développeur cœur PrestaShop

Passionné de nouvelles technologies

PHP, HTML5/CSS3, jQuery, Bootstrap, LESS CSS, ...

Voir mon CV

Mes projets