2010-10-17 17:55:07 +0000 2010-10-17 17:55:07 +0000
40
40

CURL pour télécharger un répertoire

J'essaie de télécharger un répertoire complet de sites web en utilisant CURL. La commande suivante ne fonctionne pas :

curl -LO http://example.com/

Elle renvoie une erreur : curl: Remote file name has no length!.

Mais quand je fais cela : curl -LO http://example.com/someFile.type ça marche. Vous savez comment télécharger tous les fichiers dans le répertoire spécifié ? Merci.

Réponses (6)

40
40
40
2014-01-31 16:44:52 +0000

Ça marche toujours pour moi, sans inclure de parent et récursif pour n'obtenir que le répertoire désiré.

wget --no-parent -r http://WEBSITE.com/DIRECTORY
32
32
32
2010-10-17 19:59:25 +0000

Le HTTP n'a pas vraiment de notion de répertoire. Les barres obliques autres que les trois premières (http://example.com/) n'ont pas de signification particulière, sauf en ce qui concerne les .. dans les URL relatives. Ainsi, à moins que le serveur ne suive un format particulier, il n'y a pas moyen de “télécharger tous les fichiers dans le répertoire spécifié”.

Si vous voulez télécharger l'ensemble du site, votre meilleure chance est de parcourir tous les liens de la page principale de manière récursive. Curl ne peut pas le faire, mais wget le peut. Cela fonctionnera si le site n'est pas trop dynamique (en particulier, wget ne verra pas les liens qui sont construits par du code Javascript). Commencez par wget -r http://example.com/, et regardez sous “Options de récupération récursive” et “Options d'acceptation/refus récursives” dans le manuel de wget pour des options plus pertinentes (profondeur de récursion, listes d'exclusion, etc).

Si le site web essaie de bloquer les téléchargements automatisés, vous devrez peut-être modifier la chaîne de l'agent utilisateur (-U Mozilla), et ignorer robots.txt (créer un fichier vide example.com/robots.txt et utiliser l'option -nc pour que wget n'essaie pas de le télécharger à partir du serveur).

17
17
17
2014-01-23 11:50:03 +0000

Dans ce cas, curl n'est PAS le meilleur outil. Vous pouvez utiliser wget avec l'argument -r, comme ceci :

wget -r http://example.com/

C'est la forme la plus basique, et vous pouvez aussi utiliser des arguments supplémentaires. Pour plus d'informations, voir l'argument manpage (man wget).

5
5
5
2010-10-17 17:59:25 +0000

Ce n'est pas possible. Il n'existe pas de norme, généralement mise en œuvre, permettant à un serveur web de vous renvoyer le contenu d'un répertoire. La plupart des serveurs génèrent un index HTML d'un répertoire, s'ils sont configurés pour le faire, mais cette sortie n'est pas standard, ni garantie par aucun moyen. Vous pouvez analyser ce HTML, mais n'oubliez pas que le format change d'un serveur à l'autre et qu'il n'est pas toujours activé.

2
2
2
2013-01-20 00:08:28 +0000

Vous pouvez utiliser l'extension Firefox DownThemAll ! Elle vous permettra de télécharger tous les fichiers d'un répertoire en un seul clic. Elle est également personnalisable et vous pouvez spécifier les types de fichiers à télécharger. C'est le moyen le plus simple que j'ai trouvé.

0
0
0
2014-01-23 12:44:17 +0000

Vous pourriez trouver ici une utilisation pour un ripper de site web, qui téléchargera tout et modifiera le contenu/les liens internes pour un usage local. Vous en trouverez un bon ici : http://www.httrack.com