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

Python の「requests」モジュールを使用して画像を適切にダウンロードするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-11 18:06:17
オリジナル
689 人が閲覧しました

How to Properly Download Images Using Python's `requests` Module?

Python のリクエスト モジュールを使用した画像のダウンロード

Python のリクエスト モジュールを使用してインターネットから画像をダウンロードしようとすると、urllib2 の urlopen を使用する場合と比較してコードで問題が発生する可能性があります。方法。この記事では、これらの課題に対処し、解決策を示します。

参照用の元のコード

img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
    f.write(img.read())
ログイン後にコピー

参照用の新しいコード

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)
ログイン後にコピー

問題

問題画像データを含むレスポンスの属性が urlopen の属性と異なるため、リクエストを使用するときに発生します。 urllib2.

ソリューション

リクエストの応答から画像データを取得するには、次の 2 つのオプションがあります:

  1. response.raw ファイル オブジェクトを使用する: このメソッドでは、decode_content を True に設定し、データをファイルにストリーミングする必要があります。オブジェクト:
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)        
ログイン後にコピー
  1. 応答の反復: このメソッドにより、反復中にリクエストがデータをデコードすることが保証されます:
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)
ログイン後にコピー

リクエストの呼び出しで stream=True を設定すると、イメージ全体が一度にメモリにダウンロードされなくなります。エラーを避けるために、ファイルはバイナリ モードで開く必要があります。

以上がPython の「requests」モジュールを使用して画像を適切にダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート