はじめに

Python requests で画像をダウンロードして保存する方法を調べた。

TL;DR

  • Python requests で画像をダウンロードして保存する方法を調べた
  • 公式ドキュメント 通りにやれば OK
  • Google のロゴを保存してみた

目的・やったこと

同上。

目次

  1. はじめに
  2. TL;DR
  3. 目的・やったこと
  4. 環境・条件
  5. 詳細
    1. requests で画像ダウンロードして保存
    2. ダウンロードした画像をリサイズして保存
  6. まとめ
  7. 参考文献

環境・条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.5
BuildVersion: 18F132

$ pyenv --version
pyenv 1.2.13

$ python --version
Python 3.6.2 :: Anaconda, Inc.

$ pip --version
pip 19.1.1

$ pip show requests
Name: requests
Version: 2.18.4

詳細

requests で画像ダウンロードして保存

公式ドキュメントに書いてある通りにやれば良い。get して、PIL.Imageio.BytesIO を使って保存、という流れ。

Binary Response Content

ためしに Google のロゴ をダウンロードしてみる。画像 URL が変わってる場合は、お好みの画像 URL を指定して欲しい。

1
2
3
4
5
6
7
8
9
10
import requests
from PIL import Image
from io import BytesIO

if __name__ == '__main__':
url = "https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
res = requests.get(url)
if res.status_code is 200:
i = Image.open(BytesIO(res.content))
i.save(f"google_logo.{i.format.lower()}")

上記コードを実行すると、実行ディレクトリに google_logo.png が保存されているはず。

ダウンロードした画像をリサイズして保存

保存前に PIL.image.resize を使えば OK。ダウンロードしたファイルのサイズは PIL.image.size で確認できる。

PIL.image.resize の引数は integer でないとエラーになるので注意。

1
2
3
4
5
6
7
8
9
10
11
12
import requests
from PIL import Image
from io import BytesIO

if __name__ == '__main__':
url = "https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
res = requests.get(url)
if res.status_code is 200:
i = Image.open(BytesIO(res.content))
print(i.size) # => (544, 184)
i = i.resize((int(s / 2) for s in i.size)) # 50% にリサイズ、引数を内包表記で計算。list でも tuple でも OK
i.save(f"google_logo.{i.format.lower()}")

まとめ

参考文献

関連記事