リクエストによる画像のダウンロード
Python のリクエスト モジュールを使用して Web から画像をダウンロードするのは簡単な作業です。ただし、urllib2 からリクエストに切り替える場合、画像データの取得に使用される属性の違いを理解することが重要です。
最初、urllib2 を使用するコードは img.read() を使用して画像を読み取りますが、目的のリクエストを使用したアプローチには img = r.raw.read() があります。 r.raw は実際の画像データではなくファイル オブジェクトであるため、これは誤りです。
これを解決するには、2 つの実行可能な解決策があります。
使用Response.raw ファイル オブジェクト:
強制的に解凍するには、decode_content を True に設定します。圧縮された応答の。これにより、shutil.copyfileobj() を使用してデータをファイル オブジェクトにストリーミングできます。
import requests import shutil r = requests.get(url, 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(url, 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(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk)
改行が変換されないように、宛先ファイルをバイナリ モード ('wb') で開くことを忘れないでください。さらに、イメージ全体がメモリにダウンロードされないようにするには、stream=True を設定します。
以上がPython のリクエスト ライブラリを使用して画像を効率的にダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。