Go to Top

Wget, plus qu’un aspirateur

La fonction première de wget est bien sur l’aspiration de site web. Il permet de crawler un site et de sauver toutes les pages, fichiers et images trouvés.

Aspirateur Web

L’utilisation rapide est simple est

wget -r -l3 mon_url

On choisi de parcours de façon recursive (-r) sur 3 niveau de profondeur (-l 3) à partir de l’adresse url.

ca va vite, pas de chichi, et hop on dispo du site en local

Détection de redirection

Par défaut, le script affiche sur la sortie standard les requêtes qu’il execute et les redirection qu’il suit (il affiche donc le code retour HTTP). Cela permet de regarder très rapidement si une page ou un lien redirigé est automatisé par une redirection de type 301 ‘permanente’ ou 302 ‘temporaire’. En référencement, on n’aime pas trop les 302, voila pourquoi c’est indispensable.

Vérification des entêtes apache

Encore ce matin, après une install toute fraiche de serveur et la migration de nombreux sites, je me suis retrouvé avec un problème d’encoding de page, ie : les caractères accentués sont mal affichés. Pas de problème particulier dans la base de données, l’import/export s’est bien passé. l’entête html de la page indiquait bien utf-8 ce qui correspondait au charset utilisé dans la page. Malgré cela, mon navigateur ne daignait pas affiché les choses proprement. Et la wget vient une de fois de plus à la rescousse 🙂

wget -O toto –save-headers mon_url

je sauve le contenu complet de la réponse http, header inclut, dans le fichier toto, et la horreur, je vois : Content-Type: text/html; charset=iso-8859-1 (la solution consiste à changer la configuration de apache pour que le defaultCharset soit à utf-8 au lieu de on – ce qui provoque le défaut ci dessus- )

Au passage, je peux aussi voir dans l’entête si un cookie est setté, la version de apache, de php etc…

Dans un script bash avec sed / awk / grep

Plus qu’en aspirateur, c’est véritablement dans un script shell complet que cet outil démontre tout son potentiel. Une fois la page récupérée, la parser ou en extraire du contenu est un jeu d’enfant avec les outils standards unix. Exemple de récupération standard et rapide du champ title :

wget -O TMP mon_url

TITLE=$(grep title TMP | head -n 1 | sed -e ‘s/<[^>]*>//g’)

Pour ne pas être limiter dans l’xploration des pages, il est également possible de faire des requêtes de POST pour soumettre le contenu d’un formulaire.

Scrapping et soumission automatique sont alors très facilement à votre portée.