カテゴリ: Python 更新日: 2026/06/05

PythonでWebスクレイピングして画像をダウンロードする方法!初心者向け完全ガイド

PythonのWebスクレイピングで画像をダウンロードする方法
PythonのWebスクレイピングで画像をダウンロードする方法

先生と生徒の会話形式で理解しよう

生徒

「PythonでWebサイトの画像って保存できますか?」

先生

「できますよ。Webスクレイピングを使えば、画像のURLを取得してダウンロードできます。」

生徒

「画像のURLってどうやって見つけるんですか?」

先生

「HTMLの中にあるimgタグから取得できます。それでは基本から見ていきましょう。」

1. Webスクレイピングで画像ダウンロードとは?

1. Webスクレイピングで画像ダウンロードとは?
1. Webスクレイピングで画像ダウンロードとは?

PythonのWebスクレイピングとは、インターネット上の情報を自動で取得する技術です。画像ダウンロードでは、Webページに表示されている画像を自動で保存します。例えば、手作業で画像を一枚ずつ保存する代わりに、プログラムで一括ダウンロードできます。

2. 必要なライブラリの準備

2. 必要なライブラリの準備
2. 必要なライブラリの準備

Pythonで画像をダウンロードするには、主にrequestsBeautifulSoupを使用します。requestsはインターネットにアクセスするための道具、BeautifulSoupはHTMLを解析するための道具です。


pip install requests beautifulsoup4

3. 画像のURLを取得する方法

3. 画像のURLを取得する方法
3. 画像のURLを取得する方法

Webページには画像がimgタグで書かれています。この中のsrcという属性に画像のURLが入っています。


import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")
images = soup.find_all("img")

for img in images:
    print(img["src"])

このコードで、ページ内の画像URL一覧を取得できます。

4. 画像をダウンロードする基本コード

4. 画像をダウンロードする基本コード
4. 画像をダウンロードする基本コード

画像URLが分かれば、requestsを使ってダウンロードできます。これはファイルを保存するイメージです。


import requests

image_url = "https://example.com/image.jpg"
response = requests.get(image_url)

with open("image.jpg", "wb") as file:
    file.write(response.content)

バイナリ形式で保存するためにwbを使います。

5. 複数の画像をまとめて保存する方法

5. 複数の画像をまとめて保存する方法
5. 複数の画像をまとめて保存する方法

実際のWebスクレイピングでは複数の画像を一括ダウンロードすることが多いです。


import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

images = soup.find_all("img")

for i, img in enumerate(images):
    img_url = img["src"]
    img_data = requests.get(img_url).content

    with open(f"image_{i}.jpg", "wb") as file:
        file.write(img_data)

これで複数画像を自動保存できます。

6. 相対URLに注意するポイント

6. 相対URLに注意するポイント
6. 相対URLに注意するポイント

画像URLには「相対URL」と「絶対URL」があります。相対URLはドメインが省略されています。その場合はURLを補完する必要があります。


from urllib.parse import urljoin

base_url = "https://example.com"
relative_url = "/images/sample.jpg"

full_url = urljoin(base_url, relative_url)
print(full_url)

これで正しいURLに変換できます。

7. 保存フォルダを指定する方法

7. 保存フォルダを指定する方法
7. 保存フォルダを指定する方法

画像を整理するためにフォルダに保存するのがおすすめです。フォルダがなければ作成します。


import os

folder = "images"

if not os.path.exists(folder):
    os.makedirs(folder)

with open(f"{folder}/image.jpg", "wb") as file:
    file.write(b"sample data")

フォルダを作って保存すると管理しやすくなります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

画像ダウンロードでよくある失敗は、URLが間違っている、アクセス制限がある、保存形式が違うなどです。またサイトによってはスクレイピングが禁止されている場合もあるので注意が必要です。

初心者の方はまずは簡単なサイトで試しながら、少しずつ理解を深めていくことが大切です。Webスクレイピングは慣れると非常に便利な技術になります。

まとめ

まとめ
まとめ

PythonでWebスクレイピングして画像をダウンロードする総まとめ

今回はPythonを使ったWebスクレイピングによる画像ダウンロードの方法について、基礎から実践まで順番に解説しました。PythonでWebスクレイピングを行うことで、手作業では時間がかかる画像保存作業を効率化できるようになります。特に、requestsとBeautifulSoupを組み合わせることで、WebページのHTML構造を解析し、imgタグから画像URLを取得し、自動的にダウンロードする流れを理解できたことが重要なポイントです。

Webスクレイピング初心者の方にとっては、まず「HTMLの仕組み」と「imgタグの役割」を理解することが大切です。imgタグのsrc属性に画像URLが含まれていることを知るだけでも、データ取得の幅は大きく広がります。また、Pythonのrequestsライブラリを使えば、インターネット上の画像ファイルを簡単に取得できるため、難しい操作は必要ありません。

さらに、複数の画像を一括でダウンロードする処理では、for文を使った繰り返し処理が重要になります。Webページ内のすべての画像を自動取得することで、大量の画像収集を効率よく行うことができます。画像ファイル名に連番を付けることで整理もしやすくなり、実務でも使いやすい形になります。

また、相対URLと絶対URLの違いについて理解することも非常に重要です。相対URLはそのままでは正しくアクセスできないため、urljoinを使ってURLを補完する必要があります。この処理を忘れると、画像がダウンロードできない原因になるため注意が必要です。

保存先フォルダの管理も大切なポイントです。osモジュールを使ってフォルダを作成し、画像を分類して保存することで、後からの管理がしやすくなります。特に大量の画像を扱う場合は、フォルダ分けやファイル名のルールを決めておくと作業効率が大きく向上します。

Webスクレイピングで画像ダウンロードを行う際には、アクセス制限や利用規約にも注意が必要です。サイトによってはスクレイピングが禁止されている場合もあるため、事前に確認することが大切です。適切な間隔でアクセスする、サーバーに負荷をかけないなどの配慮も重要なマナーです。

PythonでのWebスクレイピングは、画像ダウンロードだけでなく、データ収集や分析、自動化処理などさまざまな用途に応用できます。今回学んだ内容をベースに、CSV保存やデータ解析、API連携などにも挑戦していくことで、より高度なスキルを身につけることができます。

まとめのサンプルプログラム(画像一括ダウンロード完全版)


import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

url = "https://example.com"
folder = "images"

if not os.path.exists(folder):
    os.makedirs(folder)

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

images = soup.find_all("img")

for i, img in enumerate(images):
    src = img.get("src")

    if not src:
        continue

    img_url = urljoin(url, src)

    try:
        img_data = requests.get(img_url).content
        file_path = os.path.join(folder, f"image_{i}.jpg")

        with open(file_path, "wb") as file:
            file.write(img_data)

        print(f"保存成功: {file_path}")

    except Exception as e:
        print(f"エラー発生: {img_url}")

このサンプルプログラムでは、画像URLの取得、相対URLの補完、フォルダ作成、エラーハンドリングまで含めた実践的な構成になっています。初心者の方はまずこのコードを実行して、どのように画像が保存されるかを確認してみることをおすすめします。

先生と生徒の振り返り会話

生徒

「PythonでWebスクレイピングして画像をダウンロードする流れがよく分かりました。imgタグからURLを取るのがポイントなんですね。」

先生

「その通りです。HTMLの構造を理解することで、必要なデータを自由に取得できるようになります。」

生徒

「複数の画像もfor文でまとめて保存できるのは便利ですね。手作業より圧倒的に速いです。」

先生

「はい。自動化のメリットですね。さらにフォルダ管理やファイル名の工夫をすると、実務でも役立ちます。」

生徒

「相対URLの補完も重要だと分かりました。これを知らないとエラーになりますね。」

先生

「よく気付きました。urljoinはスクレイピングでは頻繁に使う重要な処理です。」

生徒

「これからは画像だけじゃなくて、テキストデータやリンクも取得してみたいです。」

先生

「とても良いですね。Webスクレイピングは応用範囲が広いので、ぜひ色々なデータ取得に挑戦してみてください。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のWebスクレイピングの記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.5
Java&Spring記事人気No5
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
No.8
Java&Spring記事人気No8
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本