téléchargement récursif wget, mais je ne veux pas suivre tous les liens

10

J'essaie de mettre en miroir un site Web à l'aide de wget, mais je ne veux pas télécharger beaucoup de fichiers, j'utilise donc l' --rejectoption de wget pour ne pas enregistrer tous les fichiers. Cependant, wget téléchargera toujours tous les fichiers et supprimera ensuite le fichier s'il correspond à mon option de rejet.

Existe-t-il un moyen de dire à wget de ne pas suivre certains liens s'ils correspondent à un joker shell? Si wget ne peut pas faire cela, existe-t-il une autre commande linux commune qui peut le faire?

Rory
la source
3
Postez votre commande entière s'il vous plaît. Cela facilite beaucoup le dépannage.
Joseph Kern

Réponses:

9

Vous pouvez également essayer HTTrack qui possède, IMO, une logique d'inclusion / exclusion plus flexible et intuitive. Quelque chose comme ça...

httrack "https://example.com" -O ExampleMirrorDirectory \
"-*" \
"+https://example.com/images/*" \
"-*.swf"

Les règles seront appliquées dans l'ordre et remplaceront les règles précédentes ...

  1. Tout exclure
  2. Mais incluez https://example.com/images/ *
  3. Mais exclure tout ce qui se termine par swf
lukecyca
la source
Téléchargerait-il du CSS, des images, etc. avec des URL mises à jour?
brandizzi
6

On dirait que ce n'est pas possible dans wget

Rory
la source
1

Sous la section --reject de 'man wget':

"Notez que si l'un des caractères génériques, *,?, [Ou], apparaît dans un élément de acclist ou rejlist, il sera traité comme un motif plutôt que comme un suffixe."

Si vous faites cela, vous voudrez peut-être donner des exemples des modèles que vous utilisez et ce que vous pensez devrait correspondre, et ce n'est pas le cas. Vous dites qu'ils correspondent, mais êtes-vous sûr?

Assurez-vous également de mettre cette liste entre guillemets, afin que le shell ne développe pas ces caractères génériques avant de passer les arguments à wget.

Même si votre système n'a pas la version 1.12, lisez la section Types de fichiers du manuel ici . Selon le journal des modifications, le responsable a ajouté quelques mises en garde:

* NEWS: Added documentation change re: --no-parents, and various
caveats on accept/reject lists behavior. Rearranged some items in
order of priority.
Kyle Brandt
la source
Les options --reject sont entre guillemets. Je peux voir que les fichiers correspondent aux bons, car après le téléchargement du fichier, wget supprime le fichier. Je veux juste arrêter de télécharger le fichier en premier lieu
Rory
S'agit-il de fichiers htm (l)? Selon le manuel, ceux-ci sont téléchargés quoi qu'il arrive.
Kyle Brandt
Oui. les fichiers que je souhaite rejeter sont des fichiers HTML. Je sais qu'ils sont téléchargés quoi qu'il arrive. Y a-t-il un moyen d'empêcher cela?
Rory
1

Vous pouvez restreindre le niveau de récursivité avec l' -l NUMBERoption, si cela aide (ne pas suivre un certain modèle d'expression régulière).

Un niveau de "2" télécharge index.html, ses sous-sites / images / etc et les liens sur le sous-site.

PEra
la source
non, cela n'aiderait pas dans ce cas
Rory
1

comment utilisez-vous wget? essayez de l'utiliser de cette façon:

wget -r --reject=gif,jpg,swf http://norc.aut.ac.ir/

cette commande ignorera les fichiers gif et jpg et swf.

orezvani
la source
Les fichiers que Rory McCann veut rejeter sont des fichiers HTML, mais il veut conserver d'autres fichiers HTML, donc cette syntaxe ne s'applique pas à sa question.
Royce Williams
1

Une solution de contournement consisterait à exécuter wget via un serveur proxy. Configurez votre proxy pour interdire certains modèles. Cela empêcherait wget de les télécharger en premier lieu.

wget téléchargera et supprimera un fichier qui correspond au modèle -R. il peut également correspondre à des modèles, pas seulement à des extensions ou à des parties de noms de fichiers. Cependant, cela n'empêche pas wget de télécharger en premier et de supprimer plus tard.

httrack a quelques fonctionnalités intéressantes mais d'après mon expérience, la façon dont il enregistre un "fichier" peut être un peu excentrique, par exemple si httrack rencontre index.asp? Type = BASIC & PAGEID = 2234234
il peut l'enregistrer mais vous devez lui dire de conserver le parties de la requête,
par exemple% h% p /% n% [TYPE: @TYPE = ::]% [PAGEID: PAGEID = ::].% t
le @ est un espace réservé pour un point d'interrogation, vous pouvez renommer les fichiers plus tard, ou peut-être échapper à un point d'interrogation à la place? Le problème est que le.% t ajoutera un '.html' à la fin de votre URI qui n'avait pas à l'origine un '.html' Et si vous le supprimez, les images téléchargées par httrack n'auront pas d'extension de fichier.

Mieux vaut utiliser wget IMHO

cparod
la source