Python Tech

[Python] requestsで画像をちゃんと保存する方法

この記事ではPythonのrequestsモジュールを使って、Webから画像をダウンロードして保存する方法を解説しています。

短く・シンプルに書ける一方で、状況に応じて適切に保存できるように配慮できるなど、柔軟性の高いコードを書けます。

実行環境

Python 3.9
requests 2.25.1

 

requestsで画像をシンプルに保存する

以下の例ではpythonロゴを画像ファイルとして保存してみます。

requests モジュールを使って画像を取得します。

requestsはimportが必要です。モジュールのインストールは(pipなら)以下のようにします。

$ pip install requests

 

画像ファイルとして書き込むファイルを組み込み関数のopenで開いてあげます。
書き込み・バイナリモード(wb)で開くようにしましょう。オプションの意味はドキュメントに書いてあります。

そしてwriteメソッドでダウンロードしたストリームコンテンツを書き込みます。

import requests

url = 'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png'

# 超シンプルな画像保存
r = requests.get(url)
if r.status_code == 200:
    with open('py_logo.png', 'wb') as f:
        f.write(r.content)

 

シンプルに記述できるので、取得するファイルの性質があらかじめよく分かっているときはこれで十分。

 

requestsで画像種類を判別して保存する

画像処理ライブラリであるPIL(Pillow)を使って、画像種類(拡張子)の判定を組み込みます。

Pillowがインストールされていない場合は、
pipなら以下のようにインストールします。

$ pip install Pillow

画像ファイルの拡張子はi.formatで取得できるので、そのままファイル名にくっつけてあげるだけでOK。

 

from PIL import Image
from io import BytesIO

url = 'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png'

# 画像ファイル種類を判別して保存
r = requests.get(url)
if r.status_code == 200:
    with BytesIO(r.content) as buf:
        i = Image.open(buf)             # PIL.Imageで読込む
        i.save(f"py_logo_2.{i.format.lower()}") # 保存ファイル名に拡張子を設定

 

Pillowのオブジェクトを操作すれば、リサイズ(縮小・拡大)やトリミング(切り取り)が自由にできます。

画像ファイル種類の判別ができるので、取得するファイル形式が分からない場合にも向いています

Pillow.Imageモジュールのマニュアル

 

Pythonの学習法について

Python の勉強が辛くなっていませんか?

Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。

ゼロから独学で勉強するのは厳しい道のりです。

今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。

できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。

 

まとめ

Python3のrequestsモジュールを使って画像ファイルをダウンロード・保存する方法を解説しました。

画像のチェックや加工・編集をしたい場合は、取得したバイトストリームをそのままPillowなどの画像編集向けのモジュールで読み込めばOKです。

実際の運用では、HTTPエラー時や破損データ取得時の対応、JPEGの圧縮なども組み込んであげることになるかもしれません。そうした部分はまた別の記事で。

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech