web-dev-qa-db-fra.com

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

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), elles 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

69
user14124

Depuis 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 dans le cas où robots.txt n'autorise pas l'ajout de -e robots=off

103
vvo

La commande wget offre l'option --mirror, qui fait la même chose que:

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

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

Toutefois, vous n’auriez peut-être pas trouvé cette information si vous n’utilisez pas la dernière version de wget.

7
Ernie Dunbar

Il semble que wget et Firefox n'analysent pas les feuilles de style CSS pour que les liens incluent 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 n'importe quel fichier 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 wget sur cette liste de liens pourrait récupérer tout ce qui manquait (utilisez l'indicateur -i 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 les liens de cette façon.

Notez que wget n’analyse que certains marquages ​​HTML (href/src) et css uris (url()) pour déterminer les pages à obtenir. Vous pouvez utiliser des addons Firefox tels que DOM Inspector ou Firebug pour déterminer si les images tierces que vous n'obtenez pas sont ajoutées via Javascript. Dans ce cas, vous devrez recourir à un script ou à un plugin Firefox pour les obtenir aussi.

2
quack quixote

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

2
webjay