2012-01-06 3 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の間のすべてのイメージが存在するわけではありません。だから私はそれがサーバー上に存在する場合、イメージを保存したいだけです。どのように私はこれを行うのですか(ubuntu)?

は事前

答えて

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は私があなたの目的のためのpythonが提供する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

あなたは黙って(何のoutputingのHTTPエラーを)失敗しないために "-f" 引数を使用することができ、例えば:

カール-f site.com/file.jpg

+0

実際の質問にお答えいただきありがとうございます。治療をします。 –

+0

まさに私が探していたもの! –

0

これは古いですが、しかし、私はbashの発見で--failを使うことができ、それは黙って失敗するでしょう。ページがエラーの場合、それはダウンロードされません...

関連する問題