PythonでWebスクレイピングして画像をダウンロードする方法!初心者向け完全ガイド
生徒
「PythonでWebサイトの画像って保存できますか?」
先生
「できますよ。Webスクレイピングを使えば、画像のURLを取得してダウンロードできます。」
生徒
「画像のURLってどうやって見つけるんですか?」
先生
「HTMLの中にあるimgタグから取得できます。それでは基本から見ていきましょう。」
1. Webスクレイピングで画像ダウンロードとは?
PythonのWebスクレイピングとは、インターネット上の情報を自動で取得する技術です。画像ダウンロードでは、Webページに表示されている画像を自動で保存します。例えば、手作業で画像を一枚ずつ保存する代わりに、プログラムで一括ダウンロードできます。
2. 必要なライブラリの準備
Pythonで画像をダウンロードするには、主にrequestsとBeautifulSoupを使用します。requestsはインターネットにアクセスするための道具、BeautifulSoupはHTMLを解析するための道具です。
pip install requests beautifulsoup4
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. 画像をダウンロードする基本コード
画像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. 複数の画像をまとめて保存する方法
実際の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に注意するポイント
画像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. 保存フォルダを指定する方法
画像を整理するためにフォルダに保存するのがおすすめです。フォルダがなければ作成します。
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. 初心者がつまずきやすいポイント
画像ダウンロードでよくある失敗は、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スクレイピングは応用範囲が広いので、ぜひ色々なデータ取得に挑戦してみてください。」