ホームページ >バックエンド開発 >Python チュートリアル >Python のリクエスト モジュールを使用して画像を効率的にダウンロードするにはどうすればよいですか?
Python のリクエスト モジュールを使用した画像のダウンロード
リクエスト モジュールを使用して Web から画像をダウンロードして保存しようとすると、開発者は困難に遭遇する。提供されたコードは最初は機能しますが、リクエストを使用してコードを変更するとエラーが発生します。
このエラーは、リクエストの応答からの不正な属性の使用が原因で発生します。リクエストを使用して画像を正常に取得するには、次の 2 つのオプションがあります。
response.raw ファイル オブジェクトを使用する
response.raw 属性を使用すると、画像の生データが返されます。応答。圧縮された応答のデコード (GZIP や deflate の使用など) は自動的には処理されません。強制的に解凍するには、decode_content 属性を True に設定します。次に、shutil.copyfileobj() を使用して、データをファイル オブジェクトにストリーミングします。
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)
チャンクのカスタマイズサイズは、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)
改行変換を防ぐために宛先ファイルをバイナリ モードで開き、メモリを大量に消費する完全ダウンロードを避けるために stream=True を設定することを忘れないでください。
以上がPython のリクエスト モジュールを使用して画像を効率的にダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。