[解決済み】リクエストを使って画像をダウンロードする方法
2022-03-24 22:32:33
質問
python の
requests
モジュールを使用します。
以下は、私が使用した(動作中の)コードです。
img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
f.write(img.read())
以下は、新しい(動作しない)コードです。
requests
:
r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
img = r.raw.read()
with open(path, 'w') as f:
f.write(img)
レスポンスからどの属性を使用するかについて、教えてください。
requests
?
解決方法は?
のどちらかを使用します。
response.raw
ファイルオブジェクト
または、レスポンスに対して反復処理を行う。
を使用するには
response.raw
ファイルライクオブジェクトは、デフォルトでは (GZIP や deflate で) 圧縮されたレスポンスのデコードを行いません。を設定することで、強制的に伸長させることができます。
decode_content
属性に
True
(
requests
に設定します。
False
でデコードそのものを制御します)。そうすると
shutil.copyfileobj()
を使用して、Pythonにデータをファイルオブジェクトにストリームさせることができます。
import requests
import shutil
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
このように反復することで、この段階までにデータが解凍されることを保証します。
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
これは128バイトのチャンクでデータを読み込みます。もし他のチャンクサイズがより効果的だと感じる場合は
Response.iter_content()
メソッド
をカスタムチャンクサイズで設定します。
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
Pythonが改行を変換しようとしないように、バイナリモードでファイルを開く必要があることに注意してください。また
stream=True
そのため
requests
は、最初に画像全体をメモリにダウンロードしないようにします。
関連
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 億の相対的輸入
-
[解決済み] Pythonで大きなファイルをリクエストでダウンロードする
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
python call matlab メソッドの詳細
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] Pythonで大きなファイルをリクエストでダウンロードする