Google

[Python] Webページをスクレイピングした結果をスプレッドシートに出力する方法

PythonでWebページをスクレイピングし、その結果をGoogleスプレッドシートに出力するには、まずrequestsBeautifulSoupを使ってWebページのデータを取得・解析します。

次に、Google Sheets APIを利用してスプレッドシートにデータを出力します。

Google Sheets APIを使用するには、Google CloudでAPIを有効化し、OAuth 2.0認証を行う必要があります。

gspreadライブラリを使うと、スプレッドシートへの書き込みが簡単に行えます。

新たなプロジェクトに取り組む際に、これらの知識を活用してみることをお勧めします

Pythonでのスクレイピング環境の準備

Webページをスクレイピングし、その結果をスプレッドシートに出力するためには、まず必要な環境を整える必要があります。

以下に、必要なライブラリのインストール方法とGoogle Sheets APIの準備手順を説明します。

必要なライブラリのインストール

Pythonでスクレイピングを行うためには、主に以下の2つのライブラリが必要です。

ライブラリ名用途
requestsWebページの取得
BeautifulSoupHTMLの解析

requestsのインストール

requestsライブラリは、HTTPリクエストを簡単に行うためのライブラリです。

以下のコマンドを実行してインストールします。

pip install requests

BeautifulSoupのインストール

BeautifulSoupは、HTMLやXMLの解析を行うためのライブラリです。

beautifulsoup4パッケージをインストールするには、以下のコマンドを実行します。

pip install beautifulsoup4

Google Sheets APIの準備

次に、Google Sheetsにデータを出力するために、Google Sheets APIを準備します。

Google Cloudでのプロジェクト作成

  1. Google Cloud Consoleにアクセスします。
  2. 新しいプロジェクトを作成します。
  3. プロジェクト名を入力し、「作成」をクリックします。

APIの有効化と認証情報の取得

  1. 作成したプロジェクトのダッシュボードに移動します。
  2. 「APIとサービス」 > 「ライブラリ」を選択します。
  3. Google Sheets API を検索し、有効化します。
  4. 「APIとサービス」 > 「認証情報」を選択し、「認証情報を作成」をクリックします。
  5. 「サービスアカウント」を選択し、必要な情報を入力して作成します。
  6. 作成したサービスアカウントのメールアドレスをコピーし、Google Sheetsの共有設定でこのメールアドレスを追加します。

gspreadライブラリのインストール

gspreadは、Google Sheets APIを簡単に操作するためのライブラリです。

以下のコマンドを実行してインストールします。

pip install gspread

これで、Pythonでのスクレイピング環境が整いました。

次のステップでは、実際にWebページからデータを取得する方法について説明します。

Webページのデータを取得する

Webページからデータを取得するためには、まずrequestsライブラリを使ってWebページを取得し、その後BeautifulSoupを使ってHTMLを解析します。

以下にその手順を詳しく説明します。

requestsを使ったWebページの取得

requestsライブラリを使用して、指定したURLからWebページの内容を取得します。

以下は、基本的な使用例です。

import requests
# 取得したいWebページのURL
url = 'https://example.com'
# Webページを取得
response = requests.get(url)
# ステータスコードを確認
if response.status_code == 200:
    print("ページの取得に成功しました。")
else:
    print("ページの取得に失敗しました。")
ページの取得に成功しました。

BeautifulSoupを使ったHTMLの解析

取得したHTMLを解析するために、BeautifulSoupを使用します。

以下のコードでは、取得したHTMLを解析し、特定のデータを抽出します。

from bs4 import BeautifulSoup
# 取得したHTMLを解析
soup = BeautifulSoup(response.text, 'html.parser')
# ページタイトルを取得
title = soup.title.string
print("ページタイトル:", title)
ページタイトル: Example Domain

タグやクラスを指定してデータを抽出する方法

特定のタグやクラスを指定してデータを抽出することができます。

以下の例では、<h1>タグの内容を取得します。

# <h1>タグの内容を取得
h1_text = soup.find('h1').text
print("H1タグの内容:", h1_text)
H1タグの内容: Example Domain

複数の要素を一度に取得する方法

複数の要素を一度に取得するには、find_allメソッドを使用します。

以下の例では、すべての<p>タグの内容を取得します。

# すべての<p>タグを取得
p_tags = soup.find_all('p')
for p in p_tags:
    print("Pタグの内容:", p.text)
Pタグの内容: This domain is for use in illustrative examples in documents.
Pタグの内容: You may use this domain in literature without prior coordination or asking for permission.

取得したデータの整形

取得したデータは、そのままでは使いにくい場合があります。

データを整形して、リストや辞書形式で整理します。

リストや辞書形式でデータを整理する

例えば、複数の<p>タグの内容をリストに格納することができます。

# <p>タグの内容をリストに格納
p_texts = [p.text for p in p_tags]
print("Pタグの内容リスト:", p_texts)
Pタグの内容リスト: ['This domain is for use in illustrative examples in documents.', 'You may use this domain in literature without prior coordination or asking for permission.']

不要なデータのフィルタリング

取得したデータの中には、不要な情報が含まれていることがあります。

これをフィルタリングすることで、必要なデータだけを残すことができます。

# 特定のキーワードを含む<p>タグのみを取得
filtered_p_texts = [p.text for p in p_tags if 'domain' in p.text]
print("フィルタリングされたPタグの内容:", filtered_p_texts)
フィルタリングされたPタグの内容: ['This domain is for use in illustrative examples in documents.', 'You may use this domain in literature without prior coordination or asking for permission.']

これで、Webページからデータを取得し、整形する方法が理解できました。

次のステップでは、取得したデータをGoogleスプレッドシートに出力する方法について説明します。

Googleスプレッドシートにデータを出力する

Webページから取得したデータをGoogleスプレッドシートに出力するためには、Google Sheets APIを使用します。

以下に、APIの認証方法やgspreadライブラリを使ったスプレッドシート操作について説明します。

Google Sheets APIの認証

Google Sheets APIを使用するためには、OAuth 2.0認証を設定し、認証トークンを取得する必要があります。

OAuth 2.0認証の設定

  1. Google Cloud Consoleで作成したプロジェクトに移動します。
  2. 「APIとサービス」 > 「認証情報」を選択します。
  3. 「認証情報を作成」から「OAuthクライアントID」を選択します。
  4. アプリケーションの種類を「デスクトップアプリ」に設定し、必要な情報を入力して作成します。
  5. 作成したクライアントIDとクライアントシークレットをメモしておきます。

認証トークンの取得と使用

次に、OAuth 2.0を使用して認証トークンを取得します。

以下のコードを実行して、認証を行います。

import gspread
from oauth2client.service_account import ServiceAccountCredentials
# スコープの設定
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
# 認証情報の設定
creds = ServiceAccountCredentials.from_json_keyfile_name('path/to/credentials.json', scope)
# 認証トークンの取得
client = gspread.authorize(creds)

ここで、path/to/credentials.jsonは、Google Cloud Consoleからダウンロードした認証情報ファイルのパスです。

gspreadを使ったスプレッドシート操作

gspreadライブラリを使用して、スプレッドシートの作成やデータの書き込みを行います。

スプレッドシートの作成・選択

新しいスプレッドシートを作成するには、以下のコードを使用します。

# 新しいスプレッドシートを作成
spreadsheet = client.create('新しいスプレッドシート名')
# 作成したスプレッドシートを選択
worksheet = spreadsheet.get_worksheet(0)  # 最初のシートを選択

シートへのデータ書き込み

取得したデータをスプレッドシートに書き込むには、以下のようにします。

# データの書き込み
data = [['タイトル', '内容'], ['Example Domain', 'This domain is for use in illustrative examples in documents.']]
worksheet.insert_rows(data, 1)  # 1行目からデータを挿入

既存のシートにデータを追記する方法

既存のスプレッドシートにデータを追記する場合は、以下のようにします。

# 既存のスプレッドシートを開く
spreadsheet = client.open('既存のスプレッドシート名')
worksheet = spreadsheet.get_worksheet(0)  # 最初のシートを選択
# データの追記
new_data = ['新しいデータ1', '新しいデータ2']
worksheet.append_row(new_data)  # 最後の行にデータを追加

データのフォーマットと整形

スプレッドシートに書き込んだデータを見やすくするために、フォーマットや整形を行います。

セルの書式設定

特定のセルの書式を設定するには、以下のようにします。

# セルの書式設定
worksheet.format('A1:B1', {'textFormat': {'bold': True}})  # 1行目を太字にする

データの自動更新

データを自動的に更新するためには、定期的にスクリプトを実行する必要があります。

これには、cronジョブやPythonのスケジューリングライブラリを使用します。

以下は、scheduleライブラリを使った例です。

import schedule
import time
def job():
    # スクレイピングとデータの更新処理をここに記述
    print("データを更新しました。")
# 1時間ごとに実行
schedule.every(1).hours.do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

これで、Googleスプレッドシートにデータを出力する方法が理解できました。

次のステップでは、応用例やよくある質問について説明します。

応用例:スクレイピング結果の自動化

スクレイピングの結果を自動化することで、定期的にデータを取得し、必要な情報を迅速に得ることができます。

以下に、スクレイピング結果の自動化に関する応用例を紹介します。

定期的にスクレイピングを実行する方法

定期的にスクレイピングを実行するための方法はいくつかあります。

cronを使った定期実行

LinuxやmacOS環境では、cronを使用して定期的にスクリプトを実行できます。

以下は、毎日午前9時にスクリプトを実行するためのcron設定の例です。

  1. ターミナルでcrontab -eを実行して、cronの設定ファイルを開きます。
  2. 以下の行を追加します。
0 9 * * * /usr/bin/python3 /path/to/your_script.py

ここで、/path/to/your_script.pyは実行したいPythonスクリプトのパスです。

Pythonのスケジューリングライブラリを使う

Python内でスケジューリングを行うには、scheduleライブラリを使用します。

以下は、毎日午前9時にスクレイピングを実行する例です。

import schedule
import time
def scrape_data():
    # スクレイピング処理をここに記述
    print("データをスクレイピングしました。")
# 毎日午前9時に実行
schedule.every().day.at("09:00").do(scrape_data)
while True:
    schedule.run_pending()
    time.sleep(1)

スクレイピング結果をメールで通知する

スクレイピングの結果をメールで通知することで、リアルタイムで情報を受け取ることができます。

smtplibを使ったメール送信

Pythonのsmtplibを使用して、メールを送信することができます。

以下は、Gmailを使用してメールを送信する例です。

import smtplib
from email.mime.text import MIMEText
def send_email(subject, body):
    sender = 'your_email@gmail.com'
    receiver = 'recipient_email@example.com'
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = receiver
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
        server.login(sender, 'your_password')
        server.sendmail(sender, receiver, msg.as_string())
# メール送信の例
send_email('スクレイピング結果', 'データをスクレイピングしました。')

Gmail APIを使ったメール送信

Gmail APIを使用すると、より安全にメールを送信できます。

以下は、Gmail APIを使用してメールを送信する基本的な手順です。

  1. Google Cloud ConsoleでGmail APIを有効化し、OAuth 2.0の認証情報を取得します。
  2. google-authgoogle-api-python-clientライブラリをインストールします。
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
  1. 以下のコードを使用してメールを送信します。
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
def send_email_via_gmail(subject, body):
    creds = Credentials.from_authorized_user_file('path/to/credentials.json')
    service = build('gmail', 'v1', credentials=creds)
    message = {
        'raw': base64.urlsafe_b64encode(f'To: recipient_email@example.com\nSubject: {subject}\n\n{body}'.encode()).decode()
    }
    service.users().messages().send(userId='me', body=message).execute()
# メール送信の例
send_email_via_gmail('スクレイピング結果', 'データをスクレイピングしました。')

スプレッドシートのデータをグラフ化する

取得したデータを視覚的に表示するために、スプレッドシートのデータをグラフ化することができます。

Google Sheetsのグラフ機能を活用する

Google Sheetsには、データをグラフ化するための機能が組み込まれています。

スプレッドシートにデータを入力した後、以下の手順でグラフを作成できます。

  1. データ範囲を選択します。
  2. メニューから「挿入」 > 「グラフ」を選択します。
  3. グラフの種類を選択し、必要に応じてカスタマイズします。

Pythonでデータを可視化する方法

Pythonのmatplotlibseabornライブラリを使用して、データを可視化することもできます。

以下は、matplotlibを使用した基本的なグラフの作成例です。

import matplotlib.pyplot as plt
# データの例
labels = ['データ1', 'データ2', 'データ3']
values = [10, 20, 15]
# グラフの作成
plt.bar(labels, values)
plt.title('スクレイピング結果のグラフ')
plt.xlabel('項目')
plt.ylabel('値')
plt.show()

これで、スクレイピング結果の自動化に関する応用例が理解できました。

次のステップでは、よくある質問について説明します。

まとめ

この記事では、Pythonを使用してWebページをスクレイピングし、その結果をGoogleスプレッドシートに出力する方法について詳しく解説しました。

具体的には、必要なライブラリのインストールから始まり、データの取得、整形、スプレッドシートへの書き込み、さらには自動化の手法まで幅広く取り上げました。

これらの知識を活用することで、効率的にデータを収集し、管理することが可能になります。

ぜひ、実際に手を動かして、スクレイピングやデータ管理のスキルを向上させてみてください。

関連記事

Back to top button
目次へ