1 votes

Comment sauvegarder un site web entier avec wget, y compris les fichiers demandés par le javascript en ligne ?

J'essaie de télécharger un site web entier pour un projet. Je travaille sous Linux et j'utilise habituellement cette méthode wget pour faire le travail

wget -r -p -k -E www.website.org

Mais pour ce site particulier, toutes les images n'ont pas été téléchargées.

Après quelques recherches, j'ai également essayé d'autres options, par exemple :

wget -r -p -k -l 0 -E --no-check-certificate www.website.org

Mais les images manquent toujours. En inspectant le code source, j'ai remarqué que beaucoup des images manquantes sont demandées par du javascript en ligne. Par exemple :

<a href="index.php" onMouseOut="MM_swapImgRestore();"  
onMouseOver="MM_swapImage('button','','images/button_highlight.gif',1)" >
   <img name="button" src="images/button.gif">
</a>

Existe-t-il un moyen d'inclure ces images avec wget ?

0voto

jvb Points 2430

Pas vraiment, ce n'est pas une chose. wget a été construit pour (ni curl par exemple). Javascript peut même retarder le chargement des images d'un certain temps, ou attendre que les images apparaissent à l'écran (cf. les pages à long défilement).

Dans votre cas, vous pourrait analyser de manière programmatique le code javascript pour extraire les noms de fichiers (comme images/button.gif ), puis les charger avec d'autres appels à wget . Mais bien sûr, il n'y a pas de solution générale à ce problème. J'ai également vu des pages web avec du javascript incorporé qui font calculer URLs d'images/noms de fichiers pendant l'exécution - par session !

Une approche viable pour contourner ces mesures d'obfuscation du javascript serait de charger la page web dans un navigateur standard, mais par le biais d'un proxy local ( squid me vient à l'esprit) ; puis d'examiner (sauvegarder) le cache du proxy.

0voto

Nausix Points 21

Je ne sais pas comment votre site est structuré, mais en effet wget Vous pouvez le faire, il y a des tonnes d'exemples pour le faire dans le manuel. Il y a une petite note sur --requisite Cela dépend donc de la structure de votre site web. Je n'ai jamais eu de problème d'aspiration et je peux difficilement indiquer le "correctif".

D'habitude, je fais quelque chose comme ça :

wget \
     --recursive \
     --no-clobber \
     --page-requisites \
     --adjust-extension \
     --convert-links \
     --restrict-file-names=unix \
     --domains <DOMAIN> \
     --no-parent \
     <URL>

Vous pouvez également essayer avec --mirror :

wget \
     --mirror \
     --no-clobber \
     --page-requisites \
     --adjust-extension \
     --convert-links \
     --restrict-file-names=unix \
     --domains <DOMAIN> \
     --no-parent \
     <URL>

Pour finir, si vous avez des fichiers dont le nom se trouve dans les en-têtes "Content-Disposable". (domaine.com/something_that_returns_a_file.php par exemple). Vous pouvez essayer de les utiliser si votre version le permet. Vous pouvez les utiliser en même temps.

--content-disposition
--metalink-over-http
--trust-server-names

Si certaines redirections vous posent problème, par exemple en vous ramenant à la page d'accueil et en lançant ensuite le téléchargement, vous pouvez définir l'option --max-redirect=0 .

La note du manuel est un peu longue à mettre ici entièrement mais elle commence comme ça :

Normalement, lors du téléchargement d'une seule page HTML, tous les documents nécessaires à l'exécution de l'opération. documents nécessaires pour l'afficher correctement ne sont pas téléchargés. L'utilisation de -r avec -l peut aider, mais comme Wget ne fait pas habituellement la distinction entre les documents externes et les documents intégrés, on se retrouve généralement avec des "documents feuilles" auxquels il manque les documents requis.

Par exemple, disons que le document 1.html contient une balise "". faisant référence à 1.gif et une balise "" pointant vers le document externe 2.html. Disons que le document 2.html est similaire mais que son image est 2.gif et qu'il est lié à 3.html. Disons que cela continue jusqu'à jusqu'à un nombre arbitrairement élevé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X