【python】Google Colabを使用したWebスクレイピングについて解説

Webスクレイピングは、ウェブページからデータを自動的に取得する技術です。Pythonは、強力なスクレイピングライブラリが多く、特にBeautifulSoupSeleniumがよく使用されます。この記事では、Google Colabを使ってWebスクレイピングを実行する方法を紹介します。Google Colabはクラウド上で動作するPythonの開発環境で、簡単にスクレイピングコードを試せるため非常に便利です。


この記事の要約

  • Webページのデータを自動的に取得・解析する技術で、商品価格やニュース記事などを取得できる。
  • BeautifulSoupとrequestsライブラリをインストールして、スクレイピングの準備をする。
  • requests.get()を使ってWebページのHTMLを取得し、BeautifulSoupでパースしてデータを抽出。
  • URLにページ番号を追加し、ループ処理で複数ページからデータを取得する方法を紹介。
  • pandasライブラリを使用して、取得したデータをCSV形式で保存する方法を解説。
  • サイトの利用規約を守り、リクエストの間隔を調整して過負荷を防ぐ。

1. Webスクレイピングの概要

Webスクレイピングとは、ウェブページのHTMLデータを解析し、必要な情報を抽出する技術です。例えば、商品価格、ニュース記事、株価情報などを自動的に取得し、データ分析に役立てることができます。

注意点:

  • Webサイトの利用規約: サイトによってはスクレイピングを禁止している場合があるため、必ず利用規約を確認しましょう。
  • スクレイピングの頻度: サーバーに過負荷をかけないように注意が必要です。

2. Google Colabでの環境準備

Google Colabはクラウド上でPythonを実行できる環境で、特に初学者にとって便利です。まずは、必要なライブラリをインストールしましょう。

依存ライブラリのインストール

Google Colab上では、BeautifulSouprequestsを使ってスクレイピングを行います。requestsはウェブページを取得するためのライブラリで、BeautifulSoupはHTMLデータの解析に使用します。

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

3. Webページからデータを取得する

次に、Pythonコードを使ってWebページの内容を取得します。ここでは、例としてニュースサイトから記事タイトルを取得するコードを紹介します。

import requests
from bs4 import BeautifulSoup

# WebページのURL
url = 'https://example.com/news'

# ページの内容を取得
response = requests.get(url)

# BeautifulSoupでHTMLをパース
soup = BeautifulSoup(response.text, 'html.parser')

# 記事タイトルを取得(例として<h2>タグを使用)
titles = soup.find_all('h2')

# タイトルの一覧を表示
for title in titles:
    print(title.get_text())

コードの説明:

  • requests.get(url): 指定したURLからWebページのHTMLデータを取得します。
  • BeautifulSoup(response.text, 'html.parser'): BeautifulSoupを使って、取得したHTMLを解析します。
  • soup.find_all('h2'): HTMLの<h2>タグに囲まれたテキストをすべて取得します。タグはWebページの構造に応じて変更してください。

4. HTMLの構造を理解する

Webページのデータを抽出するためには、そのページのHTML構造を理解する必要があります。ブラウザの「検証」機能を使って、必要な情報がどのHTMLタグに含まれているかを調べましょう。

HTMLの基本構造:

htmlコードをコピーする<html>
  <head>
    <title>ニュースサイト</title>
  </head>
  <body>
    <h2>最新ニュース</h2>
    <div class="article">
      <h2>タイトル1</h2>
      <p>記事の内容...</p>
    </div>
    <div class="article">
      <h2>タイトル2</h2>
      <p>記事の内容...</p>
    </div>
  </body>
</html>

この例では、ニュース記事のタイトルが<h2>タグで囲まれており、これをPythonで取得します。


5. スクレイピングの応用: 複数ページからデータを取得する

複数ページからデータを取得する場合は、URLのパターンを見つけ、ページをループして処理します。

base_url = 'https://example.com/news?page='

for page in range(1, 6):  # 5ページ分のデータを取得
    url = base_url + str(page)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 記事タイトルを取得
    titles = soup.find_all('h2')
    for title in titles:
        print(title.get_text())

コードの説明:

  • base_url + str(page): ページ番号をループで動的に変更し、複数ページからデータを取得します。
  • range(1, 6): 1ページ目から5ページ目までのURLを処理します。

6. データの保存

取得したデータはCSVやExcel形式で保存して、後で分析に利用できます。ここでは、pandasを使ってデータをCSVファイルに保存する例を紹介します。

取得データをCSVに保存

import pandas as pd

# 例として、記事タイトルをリストに格納
data = []
for title in titles:
    data.append(title.get_text())

# データフレームに変換
df = pd.DataFrame(data, columns=['タイトル'])

# CSVとして保存
df.to_csv('titles.csv', index=False)

Google Colabでのファイルのダウンロード

Google Colab上で作成したファイルは、以下のコマンドでローカルにダウンロードできます。

from google.colab import files
files.download('titles.csv')

7. Webスクレイピングの注意点

Webスクレイピングを行う際には、いくつかの法的・技術的な注意点があります。

  • サイトの利用規約を守る: 多くのウェブサイトは利用規約でスクレイピングを禁止しています。許可されている範囲でのみ実行しましょう。
  • リクエストの間隔を空ける: 過剰なリクエストはサーバーに負担をかけるため、time.sleep()関数を使ってリクエストの間隔を調整します。

import time

# 1秒間隔でリクエストを送る
time.sleep(1)


まとめ

この記事では、Google Colabを使ったWebスクレイピングの基本について解説しました。requestsBeautifulSoupを使用してWebページからデータを取得し、データの保存方法まで紹介しました。スクレイピングは、Webデータを効率的に取得し、データ分析や自動化に活用できる非常に強力なツールです。

今後は、より複雑なページのスクレイピングや、動的なページを扱うためのSeleniumなども学ぶことで、スクレイピングのスキルを向上させることができます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール