urllibでurlから画像ダウンロードするときにタイムアウトを設定する
pythonで画像ダウンロードする方法を調べたら出てきたのが
urllib.request.urlretrieve
を使う方法だったので、これを使っていました。
課題
しかしながら、たくさんの画像を一度にダウンロードしようとしたときにurllib.request.urlretrieve
を使う方法だとタイムアウトをセットできず、
無駄に時間がかかってしまう問題がありました。
解決方法
urllib.request.urlopen
はタイムアウトをセットできます。
これを使えば問題を解決できそうです。
21.6. urllib.request — URL を開くための拡張可能なライブラリ — Python 3.6.5 ドキュメント
実装
実装は以下のように一度 read()
でメモリ上に読み込んでからファイルに
書き込む必要があるみたいです。
timeoutは秒単位で設定できるということなので、10秒でセットしてみました。
try: data = urllib.request.urlopen(url, timeout=10).read() with open(file_name, mode="wb") as f: f.write(data) except: print("failed to download")
うまく動いてそうです。