cClaude.rocks ☕ Le blog

L'informatique et les nouvelles technologies

Menu

Pour archiver un site web ou simplement tester les liens on a souvent besoin d’un outil qui permet de faire un miroir du contenu d’un domaine.

J’ai longtemps utilisé httrack une solution libre permettant d’aspirer un site web. Cependant, ce programme n'est plus mis à jours depuis longtemps et il y a beaucoup efficace aujourd’hui.

Et le programme est disponible sur toutes les distributions Linux, il s’agit de wget.

Voici comment utiliser wget pour faire un miroir d’un site Internet :

wget -m -k -p -c -E https://www.example.org/

Si jamais la commande wget n’était disponible sur votre système, vous pouvez facilement l’installer à l’aide de :

sudo apt-get update && sudo apt-get upgrade && sudo apt-get install wget -y

Version courte

Option Description
-m Active le mode miroir
-k Converti les fichiers pour un usage local
-p Télécharge également les dépendances
-c Complète les fichiers qui sont éventuellement en plusieurs parties
-E Corrige les extensions des fichiers locaux

Version longue

  • -m ou --mirror – Activation des options appropriĂ©es pour la crĂ©ation d’un miroir. Cette option active la rĂ©cursivitĂ© et l’horodatage, dĂ©finit une profondeur de rĂ©cursion infinie et conserve les listes de rĂ©pertoires FTP. C’est Ă©quivalent Ă  -r -N -l inf --no-remove-listing.

  • -k ou --convert-links – Une fois le tĂ©lĂ©chargement terminĂ©, les liens des documents seront convertis pour les rendre compatibles avec un affichage local. Cela concerne non seulement les liens hypertextes visibles, mais Ă©galement toute partie du document qui renvoie au contenu externe, tels que les images incorporĂ©es, les liens vers les feuilles de style, les liens hypertextes vers du contenu non HTML, etc.

  • -p ou --page-requisites – Cette option demande Ă  wget de tĂ©lĂ©charger tous les fichiers nĂ©cessaires pour afficher correctement une page HTML donnĂ©e. Cela inclut des Ă©lĂ©ments tels que des images en ligne, des sons et des feuilles de style rĂ©fĂ©rencĂ©es. Par dĂ©faut, lors du tĂ©lĂ©chargement d’une seule page HTML, les documents requis pour l’afficher correctement ne sont pas tĂ©lĂ©chargĂ©s.

L’utilisation de -r avec -l peut aider, mais comme par défaut wget ne fait la distinction entre les documents externes et les documents en ligne, il ne reste généralement que des « documents feuilles » dont les éléments requis manquent.

  • -c ou --continue – Continuez Ă  obtenir un fichier partiellement tĂ©lĂ©chargĂ©. Ceci est utile lorsque vous souhaitez terminer un tĂ©lĂ©chargement dĂ©marrĂ© par une instance prĂ©cĂ©dente de wget ou par un autre programme. L’idĂ©e est de ne pas refaire l’ensemble du tĂ©lĂ©chargement, mais Ă©galement d’aller rĂ©cupĂ©rer des morceaux manquant (cas de fichier dĂ©coupĂ©).

Si vous utilisez -c sur un fichier de taille égale à celle du serveur, wget refusera de télécharger ce fichier et d’afficher un message explicatif. La même chose se produit lorsque le fichier est plus petit sur le serveur que localement (probablement parce qu'il a été modifié sur le serveur depuis votre dernière tentative de téléchargement) --- parce que « continuer » n'est pas significatif, aucun téléchargement ne sera fait.

L’autre côté de la médaille, en utilisant -c, tout fichier plus volumineux sur le serveur que localement sera considéré comme un téléchargement incomplet et seuls les octets ( length(remote) – length(local) ) seront téléchargés et ajouté à la fin du fichier local. Ce comportement peut être souhaitable dans certains cas. Par exemple, vous pouvez utiliser wget -c pour télécharger uniquement la nouvelle partie qui a été ajoutée à une collection de données ou à un fichier journal.

Toutefois, si le fichier est plus volumineux sur le serveur parce qu’il a été modifié, par opposition à un simple ajout, vous obtiendrez un fichier tronqué. wget n’a aucun moyen de vérifier que le fichier local est vraiment un préfixe valide du fichier distant. Vous devez faire particulièrement attention lorsque vous utilisez -c avec -r, car chaque fichier sera considéré comme un candidat de téléchargement incomplet.

Si vous essayez d’utiliser -c, vous obtiendrez un fichier corrompu si vous disposez d’un proxy HTTP boiteux insérant une chaîne "transfert interrompu" dans le fichier local.

Notez que -c ne fonctionne qu’avec les serveurs FTP et les serveurs HTTP prenant en charge l’en-tête « Range ».

  • -E ou --html-extension – Si un fichier de type application/xhtml+xml ou text/html est tĂ©lĂ©chargĂ© et que l’URL ne se termine pas par \.[Hh][Tt][Mm][Ll]? (regex), cette option entraĂ®nera l’ajout du suffixe .html. au nom de fichier local. Ceci est utile, par exemple, lorsque vous mettez en miroir un site distant qui utilise des pages .asp ou jsp, mais que vous voulez que les pages en miroir soient visibles sur votre serveur Apache standard. Une autre utilisation intĂ©ressante est le tĂ©lĂ©chargement de documents gĂ©nĂ©rĂ©s par CGI. Une URL du type http://site.com/article.cgi?25 sera enregistrĂ©e sous la forme article.cgi?25.html.

Notez que les noms de fichier modifiés de cette manière seront téléchargés de nouveau chaque fois que vous ferez un miroir du site, car wget ne peut pas dire que le fichier X.html local correspond à l’URL distante X (car il ne sait pas encore que l’URL produit une sortie de type application/xhtml+xml ou text/html.

wget s’assurera également que tous les fichiers téléchargés de type text/css se terminent par le suffixe .css.

*wget veillera également à ce que tous les fichiers téléchargés avec un Content-Encoding de br, compress, deflate ou gzip se terminent avec les suffixes .br, .Z, .zlib et .gz respectivement.

À l’avenir, cette option pourrait bien être étendue pour inclure des suffixes pour d’autres types de contenu, y compris des types de contenu non analysés par wget.

Rechercher les liens morts

Avec wget il y a un moyen facile de rechercher les liens cassés (ou liens mort) en sauvegardant l’affichage dans un fichier :

wget -o wget.log -r -l 10 --spider https://www.example.org/

Explication rapide des options :

Option Description
-o Sauvegarde le résultat dans un fichier pour une analyse ultérieure (Attention c’est o minuscule)
-r Suis les liens (traitement récursif)
-l Définie la profondeur de la récursion
--spider Utilise le mode « toile » de wget

Pour obtenir la liste des liens morts, il suffit alors d’utiliser :

grep -B 2 '404' wget.log | grep 'http' | cut -d ' ' -f 4 | sort -u

Ou tout sur la mĂŞme ligne:

wget -r -l 100 --spider https://www.example.org/ 2>&1 | grep -B 2 '404' | grep 'http' | cut -d ' ' -f 4 | sort -u

Attention : Cette commande ne permet pas de retrouver les liens cassés qui sortant, on limite l’analyse au site donné.

En savoir +

La commande man est toujours inintéressante pour ce genre de petit outil, mais si vous préférer une version en ligne :

Autres liens :

ᦿ


ℹ 2006 - 2020 | 🕸 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog