2012-01-06 2 views
0

저는 학교에서 학생들의 사진을 다운로드하기위한 Python 프로그램을 작성하고 있습니다. 'Curl 만 저장하지 않을 경우 404

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 

`

문제는 내가 이미지 만 서버 (안 404)에 존재하는 경우 jpg로 저장하므로 원하는, 그리고 내가 돈 때문에`: 여기

내 코드입니다 서버에있는 모든 이미지 이름을 가지고 있지만 0에서 1000000 사이의 모든 이미지에 대한 요청을 보내야하지만 0에서 1000000 사이의 모든 이미지가 존재하지는 않습니다. 따라서 이미지가 서버에있는 경우에만 이미지를 저장하고 싶습니다. 어떻게해야합니까 (우분투)?

미리

답변

4
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 나는 당신의 목적을 위해 파이썬에서 제공 urllib 라이브러리를 사용하여 제안 예외

+0

아아, 이것과 같이'+'사용하지 마십시오. '% s' 등을 사용하십시오. – ismail

+2

% 구문이 복잡하고 ".format()"이 더 좋지 않음을 발견했습니다. 그러므로 나는 작은 스크립트에서 pythonic-ness의 주어진 법칙을 하나님 께 순종하는 것을 괴롭히지 않습니다. – sleeplessnerd

+0

예, 성능 및 보안 문제로 인해 "+"구문은 사용하지 않는 것이 좋습니다. 어느 쪽도 관심사가 아닌 경우에, 누구가 걱정하십시오. –

-1

가장 간단한 방법으로 감사합니다, 내 생각, 자동으로 404 개 응답을 무시합니다 대신 curlwget을 사용하는 것입니다.

1

가 발생합니다.

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 
7

당신은 자동으로 (더하고 출력하기에 HTTP 오류) 실패하지하려면 "-f"인수를 사용할 수 있습니다, 예를 들면 :

컬 -f site.com/file.jpg

+0

실제 질문에 답변 해 주셔서 감사합니다. 치료를합니다. –

+0

정확히 내가 무엇을 찾고 있었습니까! –

0

이 오래, 하지만 bash에서 당신은 --fail을 사용할 수 있습니다. 페이지가 오류라면, 다운로드하지 않을 것입니다 ...

관련 문제