Baixando apenas imagens usando curl ou wget?

2

ATUALIZADO:

Eu encontrei usando este script Bash corrige o problema de ter arquivos GIF com uma extensão .jpg.

Estou tentando fazer download de imagens de um fórum cujo URL usa o seguinte formato:

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

Eu escrevi um script bash que usa wget para recuperar essas imagens:

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 e faz o download das imagens. No entanto, se não houver uma imagem, ela ainda fará o download do HTML resultante e o preencherá em XX.jpg .

Curl faz o mesmo:

for i in {1..10}

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

done

Existe alguma maneira de rejeitar resultados que não são /image/* ? Agora estou supondo que as imagens são jpeg, seria bom detectar o MIME / TYPE e usar o nome do arquivo apropriado.

Finalmente, wget está dando 500 códigos de resposta quando uma imagem não é encontrada, se eu puder filtrar 200 códigos de resposta, isso pode gerar uma solução.

Respostas de Bash, Ruby e Python são aceitáveis.

    
por Ash 18.03.2012 / 01:27

1 resposta

4

wget retorna um código de saída diferente de zero no erro; especifica especificamente o status de saída == 8 se o controle remoto emitiu um status 4xx ou 5xx. Então, você pode modificar seu loop bash para desvincular o arquivo se o wget não sair com sucesso:

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

Da mesma forma, o curl tem uma opção --fail, com a qual ele não salvará o arquivo e retornará o status de saída 22 quando o status http for > = 400.

    
por 18.03.2012 / 08:43