🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

797閲覧

Flickrから画像をDLしたい

irohas

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/23 00:26

前提・実現したいこと

画像をFlickrからDLしようと思っているのですが、以下のコードを書き実行したところ途中でエラーが起きてしまいDLができなくなってしまいました。
対処法を教えていただきたいです。

発生している問題・エラーメッセージ

~\AppData\Roaming\Python\Python37\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
496
497 except (ProtocolError, socket.error) as err:
--> 498 raise ConnectionError(err, request=request)
499
500 except MaxRetryError as e:

ConnectionError: ('Connection aborted.', OSError("(10054, 'WSAECONNRESET')"))

該当のソースコード

Python

1# Flickr APIで写真を検索 --- (*3)# Flickrで写真を検索して、ダウンロードする 2from flickrapi import FlickrAPI 3from urllib.request import urlretrieve 4from pprint import pprint 5import os, time, sys 6 7# APIキーとシークレットの指定(★以下書き換えてください★)--- (*1) 8key = "念のため非公開" 9secret = "念のため非公開" 10wait_time = 1 # 待機秒数(1以上を推奨) 11 12# キーワードとディレクトリ名を指定してダウンロード --- (*2) 13def main(): 14 go_download('マグロ寿司', 'sushi') 15 go_download('サラダ', 'salad') 16 go_download('麻婆豆腐', 'tofu') 17 18def go_download(keyword, dir): 19 # 画像の保存パスを決定 20 savedir = "./image/" + dir 21 if not os.path.exists(savedir): 22 os.makedirs(savedir) 23 # APIを使ってダウンロード --- (*4) 24 flickr = FlickrAPI(key, secret, format='parsed-json') 25 res = flickr.photos.search( 26 text = keyword, # 検索語 27 per_page = 300, # 取得件数 28 media = 'photos', # 写真を検索 29 sort = "relevance", # 検索語の関連順に並べる 30 safe_search = 1, # セーフサーチ 31 extras = 'url_q, license') 32 # 検索結果を確認 33 photos = res['photos'] 34 pprint(photos) 35 try: 36 # 1枚ずつ画像をダウンロード --- (*5) 37 for i, photo in enumerate(photos['photo']): 38 url_q = photo['url_q' ] 39 filepath = savedir + '/' + photo['id'] + '.jpg' 40 if os.path.exists(filepath): continue 41 print(str(i + 1) + ":download=", url_q) 42 urlretrieve(url_q, filepath) 43 time.sleep(wait_time) 44 except: 45 import traceback 46 traceback.print_exc() 47 48if __name__ == '__main__': 49 main()

試したこと

ネットで検索をかけてみた

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2020/11/23 01:05

MaxRetryErrorとなっているので、たくさんリトライしていますね。per_page = 300 で、wait_time = 1というのは大丈夫でしょうか?per_page = 3、wait_time = 10で試してみて、うまくいけばここが原因、うまくいかなければ他に原因があると思います。
irohas

2020/11/23 03:29

ご指摘ありがとうございます! wait_timeの数値を修正したらうまくいけました! ありがとうございます!!!!!!!!!!!!!
toast-uz

2020/11/23 04:14

確認ありがとうございます。それでは回答として記入しておきます。
irohas

2020/11/23 06:19

ありがとうございます! 大変助かりました!!
guest

回答1

0

ベストアンサー

MaxRetryErrorとなっているので、たくさんリトライしています。おそらく、per_page = 300 で、wait_time = 1 (300枚の画像を1秒で取得)というのが、バランスとれていないものと思います。

質問者様に、wait_timeを調整することで改善を確認いただきましたので、この推測通りであったことがわかりました。

投稿2020/11/23 04:16

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

irohas

2020/11/23 06:20

迅速な回答大変感謝いたします。 とても分かりやすく、ご丁寧な説明で大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問