web-dev-qa-db-fra.com

Pourquoi wget télécharge-t-il uniquement le fichier index.html pour certains sites Web?

J'essaie d'utiliser la commande wget: 

wget -p http://www.example.com 

pour récupérer tous les fichiers sur la page principale. Pour certains sites Web, cela fonctionne, mais dans la plupart des cas, il ne télécharge que le fichier index.html. J'ai essayé la commande wget -r mais cela ne fonctionne pas. Tout le monde sait comment récupérer tous les fichiers sur une page, ou juste me donner une liste de fichiers et les URL correspondantes sur la page

41
Jay H

Wget est également capable de télécharger un site Web complet. Mais comme cela peut surcharger le serveur, wget obéira au fichier robots.txt.

 wget -r -p http://www.example.com

Le paramètre -p indique à wget d'inclure tous les fichiers, y compris les images. Cela signifie que tous les fichiers HTML ressembleront à ce qu’ils devraient faire.

Alors que faire si vous ne voulez pas que wget obéisse à l'aide du fichier robots.txt? Vous pouvez simplement ajouter -e robots = off à la commande comme ceci:

 wget -r -p -e robots=off http://www.example.com

Comme de nombreux sites ne vous laisseront pas télécharger l'intégralité du site, ils vérifieront l'identité de votre navigateur. Pour résoudre ce problème, utilisez -U mozilla comme je l'ai expliqué ci-dessus.

 wget -r -p -e robots=off -U mozilla http://www.example.com

Beaucoup de propriétaires de sites Web n'aimeront pas le fait que vous téléchargiez la totalité de leur site. Si le serveur constate que vous téléchargez une grande quantité de fichiers, il peut vous ajouter automatiquement à la liste noire. La solution consiste à attendre quelques secondes après chaque téléchargement. La manière de faire ceci en utilisant wget est d’inclure --wait = X (où X est le nombre de secondes.)

vous pouvez également utiliser le paramètre: --random-wait pour laisser wget choisir un nombre aléatoire de secondes à attendre. Pour inclure ceci dans la commande:

wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
79
Ritesh Chandora

Premièrement, pour clarifier la question, l’objectif est de télécharger index.html ainsi que toutes les parties requises de cette page (images, etc.). L'option -p est équivalente à --page-requisites.

Si les éléments requis pour la page ne sont pas toujours téléchargés, c'est qu'ils sont souvent hébergés sur un domaine différent de celui de la page d'origine (un CDN, par exemple). Par défaut, wget refuse de visiter d’autres hôtes , vous devez donc activer la répartition d’hôte avec l’option --span-hosts.

wget --page-requisites --span-hosts 'http://www.Amazon.com/'

Si vous devez pouvoir charger index.html et que toutes les conditions requises de la page soient chargées à partir de la version locale, vous devez ajouter l'option --convert-links pour que les URL des attributs img src (par exemple) soient réécrites en URL relatives pointant vers le versions locales.

Si vous le souhaitez, vous pouvez également enregistrer tous les fichiers dans un seul répertoire "Host" en ajoutant l'option --no-Host-directories ou enregistrer tous les fichiers dans un seul répertoire plat en ajoutant l'option --no-directories.

Si vous utilisez --no-directories, de nombreux fichiers seront téléchargés dans le répertoire en cours. Vous souhaiterez donc probablement spécifier un nom de dossier pour les fichiers de sortie, en utilisant --directory-prefix.

wget --page-requisites --span-hosts --convert-links --no-directories --directory-prefix=output 'http://www.Amazon.com/'
29
Alf Eaton

Le lien que vous avez fourni est la page d'accueil ou /index.html. Par conséquent, il est clair que vous obtenez uniquement une page index.html. Pour un téléchargement réel, par exemple, pour le fichier "test.Zip", vous devez ajouter le nom de fichier exact à la fin. Par exemple, utilisez le lien suivant pour télécharger le fichier test.Zip:

wget -p nomdomaine.com/test.Zip

Télécharger un site Web complet à l'aide de wget --mirror

Vous trouverez ci-dessous la ligne de commande que vous souhaitez exécuter lorsque vous souhaitez télécharger un site Web complet et mis à disposition pour un affichage local.

wget --mirror -p --convert-links -P ./LOCAL-DIR http://www.example.com

  • –Mirror: active les options appropriées pour la mise en miroir.

  • -p: télécharge tous les fichiers nécessaires pour afficher correctement une page HTML donnée.

  • –Convert-links: après le téléchargement, convertissez les liens dans le document Pour une visualisation locale.

  • -P ./LOCAL-DIR: enregistre tous les fichiers et répertoires dans le répertoire spécifié

Télécharger uniquement certains types de fichiers à l'aide de wget -r -A

Vous pouvez l'utiliser dans les situations suivantes:

  • Télécharger toutes les images d'un site web,

  • Télécharger toutes les vidéos d'un site web,

  • Télécharger tous les fichiers PDF à partir d'un site Web

wget -r -A.pdf http://example.com/test.pdf

6
Athul AK

Un autre problème peut être que le site que vous mettez en miroir utilise des liens sans www. Donc si vous spécifiez 

wget -p -r http://www.example.com 

il ne téléchargera aucune page liée (interne) car elle provient d'un domaine "différent". Si tel est le cas, utilisez

wget -p -r http://example.com

à la place (sans www).

3
jor

Je sais que ce fil est vieux, mais essayez ce qui est mentionné par Ritesh avec:

--pas de cookies

Cela a fonctionné pour moi!

3
Joshua

Si vous recherchez index.html dans le manuel wget vous pouvez trouver une option --default-page=name qui est index.html par défaut. Vous pouvez changer pour index.php par exemple.

--default-page=index.php
0
adrianTNT

Si vous obtenez uniquement le index.html et que ce fichier a l'air de ne contenir que des données binaires (c'est-à-dire, aucun texte lisible, uniquement des caractères de contrôle), le site envoie probablement les données en utilisant la compression gzip.

Vous pouvez le confirmer en exécutant cat index.html | gunzip pour voir s'il génère du code HTML lisible.

Si tel est le cas, alors la fonctionnalité récursive de wget (-r) ne fonctionnera pas. Il existe un patch for wget pour travailler avec les données compressées gzip, mais cela ne semble pas encore être dans la version standard.

0
Silveri