見出し画像

【初心者向け】Google ColabでWebサイトの画像を自動で簡単に取得する方法

Google Colaboratoryを活用してWebサイトから画像を自動取得(スクレイピング)して保存する方法を紹介します。
Pythonを利用し、画像を効率的にダウンロードする手順をわかりやすく解説します。この方法を活用することで、学習やプロジェクトに必要な画像データをいちいち一つずつダウンロードする手間を省き、手軽に取得できます。
この記事では、プログラム初心者でもわかりやすくステップ毎に解説していきます。途中コードの説明もありますが、読み飛ばしても大丈夫です。

1.Google Colaboratoryとは?


Google Colaboratory(通称:Colab)は、Googleが提供するクラウド上で動作するPythonの実行環境です。特にデータ分析や機械学習の学習に人気があり、無料で利用できるかつGoogleアカウントさえあれば実行可能な点が大きな特徴です。Googleドライブと連携することで、データの保存や共有も簡単に行えます。

2.Webスクレイピングとは?


Webスクレイピングとは、特定のWebページから情報を自動的に抽出する技術です。Pythonのようなプログラミング言語を使うことで、Webページからテキストや画像を取得し、自動的に保存することが可能です。今回の記事では、Webページ上の画像を取得してGoogleドライブに保存する方法を解説します。

3.Google ColaboratoryでWebサイトの画像をスクレイピングする方法


GoogleドライブからColaboratoryを開く方法

  1. Googleドライブにアクセスします。

  2. 任意のフォルダから「右クリック > その他 > Google Colaboratory」または左上の「新規 > その他 > Google Colaboratory」を選択して開きます。※Google Colaboratoryが項目になければ、「右クリック > その他 > アプリを追加」で検索してください

スクレイピング用プログラミングコード

はじめに、必要なライブラリをインストールします。以下のコードをコピペして実行してください。

# 必要なライブラリのインストール
!pip install requests beautifulsoup4

これらのライブラリは、Webページのデータを取得し、HTMLを解析するために必要です。また、Google Colaboratoryにはデフォルトでこれらのライブラリが含まれていないため、先にインストールする必要があります。

次に以下のコードをコピペしてください。
以下のプログラムは、指定したWebサイトから画像を取得し、Googleドライブに保存します。

自分で変更する箇所は「スクレイピングするURLを指定」の部分だけです。「url = '*******/' 」に自分の指定するWEBサイトのURLを貼り付けてください。

# 必要なモジュールをインポート
import os
import requests
from bs4 import BeautifulSoup
from google.colab import drive

# Google ドライブをマウント
drive.mount('/content/drive')

# 保存先フォルダを指定
save_folder = '/content/drive/My Drive/画像スクレイピング'
os.makedirs(save_folder, exist_ok=True)

# スクレイピングする URL を指定
url = '*******/'  # スクレイピングしたい Web サイトの URL

# Web ページを取得
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# 画像タグをすべて取得
images = soup.find_all('img')

# 画像をダウンロードして保存
for index, img in enumerate(images):
    # 画像の URL を取得
    img_url = img.get("src") or img.get("srcset") or img.get("data-src")

    # 相対パスの場合は絶対パスに変換
    if not img_url.startswith("http"):
        img_url = requests.compat.urljoin(url, img_url)

    # # gifファイルや1*1データはダウンロードしない
    if 'data:image' in img_url:
        print("Base64形式の画像が見つかりました:", img_url)
    else:
        # 画像を取得して保存
        try:
            img_data = requests.get(img_url).content
            file_path = os.path.join(save_folder, f'image_{index + 1}.jpg')
            with open(file_path, 'wb') as f:
                f.write(img_data)
            print(f"Saved: {file_path}")
        except Exception as e:
            print(f"Failed to save {img_url}: {e}")

print("ダウンロードが完了しました。")

コードの解説

以下は、画像をスクレイピングする上記Pythonコードの解説です。

# 必要なモジュールをインポート
import os
import requests
from bs4 import BeautifulSoup
from google.colab import drive
  • os: ファイルやディレクトリの操作を行うためのライブラリ。

  • requests: Webページのデータを取得するために使用。

  • BeautifulSoup: HTML解析を行い、特定の情報を取得するために使用。

  • google.colab.drive: Google ColabとGoogleドライブを連携させるためのモジュール。

# Google ドライブをマウント
drive.mount('/content/drive')
# 保存先フォルダを指定
save_folder = '/content/drive/My Drive/画像スクレイピング'
os.makedirs(save_folder, exist_ok=True)
  • Googleドライブをマウントして、ファイルシステムにアクセスできるようにします。

  • save_folder: 画像を保存するフォルダのパスを指定。ここでは、MyDrive直下に画像スクレイピングというフォルダを作り保存することにします。

  • os.makedirs(): フォルダが存在しない場合に新しく作成します。

# スクレイピングする URL を指定
url = 'https://www.*****/'  # スクレイピングしたい Web サイトの URL

スクレイピング対象のWebサイトのURLを指定します。

# Web ページを取得
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 画像タグをすべて取得
images = soup.find_all('img')
  • requests.get(url): 指定したURLからWebページの内容を取得。

  • BeautifulSoup(response.content, 'html.parser'): HTMLを解析するためにBeautifulSoupを使用。

  • soup.find_all('img'): ページ内の全ての画像タグ (<img>) を取得します。

# 画像をダウンロードして保存
for index, img in enumerate(images):
    # 画像の URL を取得
    img_url = img.get("src") or img.get("srcset") or img.get("data-src")
    # 相対パスの場合は絶対パスに変換
    if not img_url.startswith("http"):
        img_url = requests.compat.urljoin(url, img_url)
  • img.get:画像のURLを取得します。src, srcset, data-src のいずれかから画像URLを取得します。

  • 相対URLの場合は絶対URLに変換します。

 # gifファイルや1*1データはダウンロードしない
    if 'data:image' in img_url:
        print("Base64形式の画像が見つかりました:", img_url)
    else:
        # 画像を取得して保存
        try:
            img_data = requests.get(img_url).content
            file_path = os.path.join(save_folder, f'image_{index + 1}.jpg')
            with open(file_path, 'wb') as f:
                f.write(img_data)
            print(f"Saved: {file_path}")
        except Exception as e:
            print(f"Failed to save {img_url}: {e}")
  • Base64形式の画像(通常1x1ピクセルなど)をスキップします。

  • requests.get(img_url).content: 画像を取得。

  • with open(file_path, 'wb') as f: バイナリ形式で画像を保存します。

  • エラーハンドリングを使用して、保存に失敗した場合はエラーメッセージを表示します。

4.注意事項とまとめ


注意事項

  • コードを実行するとGoogleドライブへの認証が求められるので、自身のGoogleアカウントにログインし許可してください。許可するとコードが実行されます。これはGoogle Colaboratoryから自身のGoogleドライブに勝手にアクセスし画像を保存しないための認証です。

  • スクレイピングを行う際は、必ず対象サイトの利用規約を確認し、サイトに負荷をかけないように心がけましょう。

まとめ

  • 今回はGoogle Colaboratoryを使ってWebサイトの画像をスクレイピングし、Googleドライブに保存する方法を紹介しました。

  • 手順に従って実行すれば、プログラミング初心者でも簡単にWebスクレイピングを体験できます。

  • Google Colaboratoryを使用することで、ローカル環境のセットアップをせずにクラウド上で作業ができるため便利です。

いいなと思ったら応援しよう!