2 votos

¿Descargar sólo imágenes usando curl o wget?

ACTUALIZADO:

He descubierto que el uso de este Bash script soluciona el problema de tener archivos GIF con extensión .jpg.


Estoy intentando descargar imágenes de un foro cuya url utiliza el siguiente formato:

http://www.someforum.com/attachment.php&id=XXX

He escrito un bash script que utiliza wget  para recuperar estas imágenes:

for i in {1..10}

do
    wget --accept .jpg,.jpeg --cookies=on --load-cookies=cookies.txt -p "http://www.someforum.com/attachment.php&id=${i}" -O "image${i}.jpg"

done

Funciona y descarga las imágenes. Sin embargo, si no hay una imagen, sigue descargando el HTML resultante y lo mete en XX.jpg .

Curl hace lo mismo:

for i in {1..10}

do
    curl --cookie cookies.txt "http://www.someforum.com/attachment.php&id=${i}" -o "image${i}.jpg"

done

¿Hay alguna manera de rechazar los resultados que no son /image/* ? Ahora mismo estoy asumiendo que las imágenes son jpeg, estaría bien detectar el MIME/TYPE y utilizar el nombre de archivo apropiado.

Por último, wget está dando 500 códigos de respuesta cuando no se encuentra una imagen, si puedo filtrar 200 códigos de respuesta esto puede dar una solución.

Se aceptan respuestas en Bash, Ruby y Python.

4voto

user122508 Puntos 11

Wget devuelve un código de salida distinto de cero en caso de error; específicamente establece un estado de salida == 8 si el remoto emitió un estado 4xx o 5xx. Por lo tanto, puede modificar su bucle bash para desvincular el archivo si wget no sale con éxito:

for i in {1..10}
do
    wget --accept .jpg,.jpeg --cookies=on --load-cookies=cookies.txt -p "http://www.someforum.com/attachment.php&id=${i}" -O "image${i}.jpg" || rm "image${i}.jpg"
done

Del mismo modo, curl tiene una opción --fail, con la que no guarda el archivo y devuelve el estado de salida 22 cuando el estado http es >= 400.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: