Enregistrez une seule page Web (avec des images d'arrière-plan) avec Wget

73

Je souhaite utiliser Wget pour enregistrer des pages Web uniques (pas de manière récursive, ni des sites entiers) à des fins de référence. Tout comme la "page Web complète" de Firefox.

Mon premier problème est le suivant: je ne parviens pas à faire enregistrer par Wget les images d’arrière-plan spécifiées dans le CSS. Même si cela sauvegardait les fichiers d’image d’arrière-plan, je ne pense pas que --convert-links convertirait les URL d’image d’arrière-plan du fichier CSS pour qu'elles pointent vers les images d’arrière-plan enregistrées localement. Firefox a le même problème.

Mon deuxième problème est le suivant: s'il y a des images sur la page que je veux enregistrer qui sont hébergées sur un autre serveur (comme des annonces), celles-ci ne seront pas incluses. --span-hosts ne semble pas résoudre ce problème avec la ligne ci-dessous.

J'utilise: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html

utilisateur14124
la source
1
exactement la même ligne (wget --no-parent - horodatage --convert-links --page-requisites --no-annuaires --no-host-directory -erobots = off domain.tld) ​​enregistre effectivement les images d'arrière-plan référencées depuis CSS après la mise à jour vers la version 1.12. Le manuel dit: "Avec les URL http, Wget récupère et analyse le code HTML ou CSS de l’URL donnée, en récupérant les fichiers auxquels le document fait référence, par le biais de balises telles que href ou src, ou de valeurs uss CSS spécifiées à l’aide de la fonctionnalité" url () " notation." Deuxième problème doit encore être résolu
utilisateur14124

Réponses:

106

De la page de manuel Wget :

En fait, pour télécharger une seule page et toutes ses conditions (même s’ils existent sur des sites Web distincts) et pour s’assurer que le lot s’affiche correctement localement, cet auteur aime utiliser quelques options en plus de '-p':

wget -E -H -k -K -p http://www.example.com/

Également au cas où robots.txtvous refuseriez d'ajouter-e robots=off

vvo
la source
Il semble qu’il s’agisse de réécrire js et css en adresses absolues
Greg Dean
1
tant pis, c'était robots.txt m'empêcher de mettre à jour la réponse avec la solution de contournement
Greg Dean
19
Développé:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
Sam
4
Ou mieux encore wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[URL]
Petah
@ {etah: J'ai essayé votre commande avec vos arguments, il téléchargera d'autres pages Web que celle spécifiée.
Tim
7

La wgetcommande offre l'option --mirrorqui fait la même chose que:

$ wget -r -N -l inf --no-remove-listing

Vous pouvez également -xcréer une hiérarchie de répertoires complète pour le site, y compris le nom d'hôte.

Vous n’auriez peut-être pas trouvé cela si vous n’utilisez pas la dernière version de wget.

Ernie Dunbar
la source
1
Cela va probablement explorer tout le site avec ses sous-URL
4253wyerg4e
2

Il semble que wgetFirefox n’analyse pas les CSS pour inclure ces fichiers dans le téléchargement. Vous pouvez contourner ces limitations en utilisant ce que vous pouvez, et en scriptant l'extraction de lien à partir de tout code CSS ou Javascript dans les fichiers téléchargés pour générer une liste des fichiers que vous avez manqués. Ensuite, une deuxième exécution de wgetcette liste de liens pourrait récupérer ce qui a été manqué (utilisez l' -iindicateur pour spécifier une URL de liste de fichiers).

Si vous aimez Perl, il existe un module CSS :: Parser sur CPAN qui peut vous permettre d'extraire facilement des liens de cette façon.

Notez que wgetseuls certains balises html ( href/ src) et css uris ( url()) sont analysés pour déterminer les conditions de page à obtenir. Vous pouvez essayer d’utiliser des addons Firefox comme DOM Inspector ou Firebug pour déterminer si les images tierces que vous n’obtenez pas sont ajoutées via Javascript. Dans l’affirmative, vous devrez recourir à un script ou au plug-in Firefox pour les obtenir. aussi.

Quack Quack
la source
Comme je l'ai dit dans le commentaire de mon premier post, il semble que cela ait été corrigé dans la v1.12. Je ne sais toujours pas comment inclure des images qui se trouvent sur d'autres serveurs.
utilisateur14124
Oui, l'analyse du CSS est nouvelle dans wget v1.12, elle se trouve en haut du
journal des modifications
Essayez d'ajouter l'option -H à la liste. Il signifie --span-hosts et permet le téléchargement de contenu depuis des hôtes externes.
Michael
2

J'ai réalisé Webtography dans un but similaire: https://webjay.github.io/webtography/

Il utilise Wget et pousse le site dans un référentiel de votre compte GitHub.

J'utilise ces arguments:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

webjay
la source