CURL pour télécharger un répertoire

38

J'essaie de télécharger un répertoire de site Web complet à l'aide de CURL. La commande suivante ne fonctionne pas:

curl -LO http://example.com/

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

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

Foo
la source

Réponses:

33

Fonctionne toujours pour moi, inclus aucun parent et récursif pour obtenir uniquement le répertoire souhaité.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY
stanzheng
la source
1
Ce devrait être la réponse acceptée.
Juan Jimenez
Essayer de télécharger un dossier depuis git. J'ai essayé wget --no-parent -r http://WEBSITE.com/DIRECTORYet aussi sans --no-parent- n'a pas fonctionné.
Sam-T
32

HTTP n'a pas vraiment de notion de répertoires. Les barres obliques autres que les trois premières (http://example.com/ ) n'ont aucune signification particulière, sauf en ce qui concerne les ..URL relatives. Donc, sauf si le serveur suit un format particulier, il n'y a aucun moyen de «télécharger tous les fichiers dans le répertoire spécifié».

Si vous souhaitez télécharger l'intégralité du site, le mieux 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 Web 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 / rejet récursif» dans le manuel de wget pour des options plus pertinentes (profondeur de récursivité, listes d'exclusion, etc.).

Si le site Web tente 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.txtet utiliser l' -ncoption pour que wget n'essaie pas de le télécharger à partir du serveur).

Gilles, arrête de faire le mal
la source
Comment wget est capable de le faire. ??
Srikan
@Srikan wget analyse le HTML pour trouver les liens qu'il contient et télécharge récursivement (une sélection de) ces liens.
Gilles 'SO- arrête d'être méchant'
Si les fichiers n'ont pas de liens internes, le téléchargement récursif n'obtient pas tous les fichiers. Disons qu'il existe un dossier HTTP de certains fichiers txt. Wget réussira-t-il à obtenir tous les fichiers. Laissez-moi l'essayer après ce commentaire
Srikan
@Srikan HTTP n'a pas de concept de répertoire. Le téléchargement récursif signifie suivre les liens dans les pages Web (y compris les pages Web générées par le serveur pour afficher une liste de répertoires, si le serveur Web le fait ).
Gilles 'SO- arrête d'être méchant'
wget prend en charge ignorer robots.txt avec le drapeau -e robots=off. Vous pouvez également éviter de le télécharger en le rejetant avec -R "robots.txt".
Ryan Krage
17

Dans ce cas, ce curln'est PAS le meilleur outil. Vous pouvez utiliser wgetavec l' -rargument, comme ceci:

wget -r http://example.com/ 

Il s'agit de la forme la plus simple et vous pouvez également utiliser des arguments supplémentaires. Pour plus d'informations, voir le manpage( man wget).

marocain
la source
5

Ce n'est pas possible. Il n'existe aucun moyen standard, généralement implémenté, pour 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 code HTML, mais gardez à l'esprit que le format changera de serveur en serveur et ne sera pas toujours activé.

Brad
la source
Regardez cette application appelée Site Sucker. sitesucker.us . Comment font-ils?
Foo
Ils analysent le fichier HTML et téléchargent tous les liens qu'il contient.
Brad
Utilisation de wgetou curl?
Foo
7
@Brad: curl n'analyse pas le code HTML, mais wget le fait précisément (cela s'appelle la récupération récursive).
Gilles 'SO- arrête d'être méchant'
1
Ah, eh bien je suis corrigé! gnu.org/software/wget/manual/html_node/… OP doit être conscient que cela n'obtient toujours pas ce qu'il recherche ... il ne suit que les liens disponibles sur les pages retournées.
Brad
2

Vous pouvez utiliser l'extension Firefox DownThemAll! Il vous permettra de télécharger tous les fichiers d'un répertoire en un seul clic. Il 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é.

Asdf
la source
0

Vous pouvez trouver une utilisation pour un ripper de site Web ici, cela téléchargera tout et modifiera le contenu / liens internes pour une utilisation locale. Un bon peut être trouvé ici: http://www.httrack.com

Gaurav Joseph
la source