2

ОБНОВЛЕНО:

Я обнаружил, что использование этого скрипта Bash решает проблему наличия файлов GIF с расширением .jpg.


Я пытаюсь загрузить изображения с форума, URL которого использует следующий формат:

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

Я написал скрипт bash, который использует wget для получения этих изображений:

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

Работает и скачивает изображения. Однако, если изображение отсутствует, оно все равно загружает полученный HTML- код и помещает его в XX.jpg .

Керл делает то же самое:

for i in {1..10}

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

done

Есть ли способ отклонить результаты, которые не являются /image/*? Прямо сейчас я предполагаю, что изображения в формате JPEG, было бы неплохо обнаружить MIME/TYPE и использовать соответствующее имя файла.

Наконец, wget выдает 500 кодов ответов, когда изображение не найдено, если я могу отфильтровать 200 кодов ответов, это может привести к решению.

Bash, Ruby, Python ответы приемлемы.

1 ответ1

4

wget возвращает ненулевой код выхода при ошибке; в частности, он устанавливает состояние выхода == 8, если пульт выдал статус 4xx или 5xx. Таким образом, вы можете изменить цикл bash, чтобы отсоединить файл, если wget не завершился успешно:

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

Аналогично, в curl есть опция --fail, с помощью которой он не будет сохранять файл и возвращает состояние выхода 22, когда http-статус> = 400.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .