Curl только сохранить, если не 404 - PullRequest
0 голосов
/ 06 января 2012

Я пишу программу на Python для загрузки некоторых фотографий учеников в моей школе.

Вот мой код: `

import os
count = 0
max_c = 1000000
while max_c >= count:
    os.system("curl http://www.tjoernegaard.dk/Faelles/ElevFotos/"+str(count)+".jpg > "+str(count)+".jpg")
    count=count+1

`

Проблемая хочу только сохранить jpg, если изображение существует на сервере (не 404), и поскольку у меня нет всех имен изображений на сервере, я должен отправить запрос на все изображения в диапазоне от 0 до 1000000,но не все изображения между 0 и 1000000 существуют.Поэтому я хочу сохранить изображение, только если оно существует на сервере.Как мне это сделать (убунту)?

Заранее спасибо

Ответы [ 5 ]

10 голосов
/ 02 ноября 2012

Вы можете использовать аргумент "-f" для тихого сбоя (без вывода ошибок HTTP), например:

curl -f site.com/file.jpg

3 голосов
/ 06 января 2012
import urllib2
import sys

for i in range(1000000):
  try:
    pic = urllib2.urlopen("http://www.tjoernegaard.dk/Faelles/ElevFotos/"+str(i)+".jpg").read()
    with open(str(i).zfill(7)+".jpg") as f:
      f.write(pic)
    print "SUCCESS "+str(i)
  except KeyboardInterrupt:
    sys.exit(1)
  except urllib2.HTTPError, e:
    print "ERROR("+str(e.code)+") "+str(i)

должно работать, исключение 404

1 голос
/ 06 января 2012

Я бы предложил использовать библиотеку urllib, предоставляемую python для вашей цели.

count = 0
max_c = 1000000
while max_c >= count:
    resp = urllib.urlopen("http://www.tjoernegaard.dk/Faelles/ElevFotos/"+str(count)+".jpg")
    if resp.getcode() == 404:
      //do nothing
    else:
    // do what you got to do.

   count=count+1
0 голосов
/ 05 января 2015

Это старая версия, но я обнаружил, что в bash вы можете использовать --fail, и она не будет работать без сбоев. Если страница является ошибкой, она НЕ будет загружена ...

0 голосов
/ 06 января 2012

Я думаю, что самый простой способ - использовать wget вместо curl, что автоматически отбросит 404 ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...