ホームページ >バックエンド開発 >Python チュートリアル >Python のリクエスト モジュールを使用して画像を効率的にダウンロードするにはどうすればよいですか?

Python のリクエスト モジュールを使用して画像を効率的にダウンロードするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-18 10:19:13269ブラウズ

How to Efficiently Download Images with Python's Requests Module?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。