CURL para descargar un directorio

38

Estoy tratando de descargar un directorio completo del sitio web usando CURL. El siguiente comando no funciona:

curl -LO http://example.com/

Se devuelve un error: curl: Remote file name has no length!.

Pero cuando hago esto: curl -LO http://example.com/someFile.typefunciona. ¿Alguna idea de cómo descargar todos los archivos en el directorio especificado? Gracias.

Foo
fuente

Respuestas:

33

Siempre funciona para mí, incluido ningún padre y recursivo para obtener solo el directorio deseado.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY
stanzheng
fuente
1
Esta debería ser la respuesta aceptada.
Juan Jiménez
Intentando descargar una carpeta de git. Lo intenté wget --no-parent -r http://WEBSITE.com/DIRECTORYy también sin --no-parent, no funcionó.
Sam-T
32

HTTP realmente no tiene una noción de directorios. Las barras distintas de las tres primeras ( http://example.com/) no tienen ningún significado especial, excepto con respecto a ..las URL relativas. Entonces, a menos que el servidor siga un formato particular, no hay forma de "descargar todos los archivos en el directorio especificado".

Si desea descargar todo el sitio, su mejor opción es recorrer todos los enlaces de la página principal de forma recursiva. Curl no puede hacerlo, pero wget sí. Esto funcionará si el sitio web no es demasiado dinámico (en particular, wget no verá los enlaces construidos por el código Javascript). Comience con wget -r http://example.com/y busque en "Opciones de recuperación recursiva" y "Opciones de aceptación / rechazo recursivo" en el manual de wget para obtener opciones más relevantes (profundidad de recursión, listas de exclusión, etc.).

Si el sitio web intenta bloquear las descargas automáticas, es posible que deba cambiar la cadena del agente de usuario ( -U Mozilla) e ignorarla robots.txt(cree un archivo vacío example.com/robots.txty use la -ncopción para que wget no intente descargarlo del servidor).

Gilles 'SO- deja de ser malvado'
fuente
Cómo wget es capaz de hacerlo. ??
Srikan
@Srikan wget analiza el HTML para encontrar los enlaces que contiene y descarga recursivamente (una selección de) esos enlaces.
Gilles 'SO- deja de ser malvado'
Si los archivos no tienen enlaces internos, la descarga recursiva no puede obtener todos los archivos. Digamos que hay una carpeta HTTP de algunos archivos txt. Tendrá éxito para obtener todos los archivos. Permítanme probarlo después de este comentario
Srikan
@Srikan HTTP no tiene concepto de directorio. La descarga recursiva significa seguir los enlaces en las páginas web (incluidas las páginas web generadas por el servidor para mostrar una lista de directorios, si el servidor web lo hace ).
Gilles 'SO- deja de ser malvado'
wget admite ignorar robots.txt con la bandera -e robots=off. Alternativamente, puede evitar descargarlo rechazándolo con -R "robots.txt".
Ryan Krage
17

En este caso, curlNO es la mejor herramienta. Puede usar wgetcon el -rargumento, así:

wget -r http://example.com/ 

Esta es la forma más básica, y también puede usar argumentos adicionales. Para obtener más información, consulte el manpage( man wget).

marroquí
fuente
5

Esto no es posible No hay una forma estándar, generalmente implementada, para que un servidor web le devuelva el contenido de un directorio. La mayoría de los servidores generan un índice HTML de un directorio, si está configurado para hacerlo, pero esta salida no es estándar ni está garantizada de ninguna manera. Puede analizar este HTML, pero tenga en cuenta que el formato cambiará de servidor a servidor y no siempre estará habilitado.

Puntilla
fuente
Mira esta aplicación llamada Site Sucker. sitesucker.us . ¿Cómo lo hicieron?
Foo
Analizan el archivo HTML y descargan todos los enlaces que contiene.
Brad
Usando wgeto curl?
Foo
77
@Brad: curl no analiza el HTML, pero wget hace precisamente esto (se llama recuperación recursiva).
Gilles 'SO- deja de ser malvado'
1
Ah, bueno, estoy corregido! gnu.org/software/wget/manual/html_node/… OP debe tener en cuenta que esto todavía no consigue lo que está buscando ... solo sigue los enlaces que están disponibles en las páginas devueltas.
Brad
2

Puedes usar la extensión de Firefox DownThemAll! Le permitirá descargar todos los archivos en un directorio con un solo clic. También es personalizable y puede especificar qué tipos de archivos descargar. Esta es la forma más fácil que he encontrado.

Asdf
fuente
0

Puede encontrar un uso para un destripador de sitios web aquí, esto descargará todo y modificará los contenidos / enlaces internos para uso local. Una buena se puede encontrar aquí: http://www.httrack.com

Gaurav Joseph
fuente