スポンサーリンク

PythonでWebスクレイピングしてスプレッドシートに自動書き込みする方法【初心者向け】

自動化スクリプト
  1. 1. はじめに
    1. ● スクレイピングってなに?
    2. ● スプレッドシートに書き込むってどういうこと?
    3. ● どんな場面で役に立つの?
  2. 2. 必要なライブラリと事前準備
    1. ● まずは必要なライブラリをインストールしよう
    2. ● GoogleスプレッドシートのAPIを使う準備
      1. 手順① Google Cloud Platformにアクセス
      2. 手順② Google Sheets APIを有効にする
      3. 手順③ 認証情報(credentials.json)をダウンロード
      4. 手順④ スプレッドシートの共有設定
  3. 3. Webスクレイピングの基本コード
    1. ● スクレイピングで使うライブラリ
    2. ● サンプルコード:ニュースサイトから記事タイトルを取得
    3. ● 出力例(※実行時期によって変わります)
    4. ● ポイント解説
    5. ● 注意ポイント
  4. 4. Googleスプレッドシートへ書き込む方法
    1. ● 必要なライブラリをおさらい
    2. ● スプレッドシートへ書き込む基本コード
    3. ● ここまでの流れまとめ
    4. ● 画面イメージ(スプレッドシートに書き込まれる内容)
    5. ● ワンポイントアドバイス
  5. 5. 実践:スクレイピング→スプレッドシート書き込みまでの一連のコード例
    1. ● やることまとめ
    2. ● 実践コード全体(コピペOK!)
    3. ● 実行前のチェックリスト ✅
    4. ● 実行するとどうなる?
    5. ● 応用のヒント 💡
  6. 6. エラー対処法とよくあるつまずきポイント
    1. ✅ よくあるエラーとその解決法
    2. ● ① FileNotFoundError: [Errno 2] No such file or directory: 'credentials.json'
    3. ● ② gspread.exceptions.APIError: 403 PERMISSION_DENIED
    4. ● ③ requests.exceptions.ConnectionError や Timeout
    5. ● ④ スプレッドシートに書き込んだデータの行列がズレる・空欄になる
    6. ● ⑤ APIの呼び出し制限(Rate Limit)にひっかかる
    7. 🔰 トラブルを避けるコツ
  7. 7. まとめ
    1. 📌 今回のポイントをおさらい
    2. 🧠 Python × Googleスプレッドシートは最強の自動化コンビ!
    3. あわせて読みたい
  8. よくある質問(Q&A)
    1. 関連投稿:

1. はじめに

こんにちは!今回は「PythonでWebスクレイピングをして、Googleスプレッドシートにデータを書き込む方法」について、初心者向けにやさしく紹介していきます。

● スクレイピングってなに?

まず「スクレイピング」とは、Webサイトのページから自動で情報を集めることを言います。
たとえば、ニュースサイトから最新の記事タイトルだけを集めたり、天気予報の情報を自動で取得したりできるんです。

手作業で毎回コピペするのって大変ですよね?
Pythonを使えば、そういった「繰り返し作業」を一気に自動化できるんです!

● スプレッドシートに書き込むってどういうこと?

スクレイピングで集めたデータを、あとで見返したり、集計したりしたいときには「表形式で保存」できると便利ですよね。
そんなときにぴったりなのが Googleスプレッドシート です!

スプレッドシートなら、

  • Webブラウザからいつでも確認できる
  • 複数人で共有・編集できる
  • Excelのように並べ替えやグラフ化も簡単!

しかも、Pythonを使えば自動で書き込むこともできるんです!


● どんな場面で役に立つの?

たとえば、こんな使い方ができます:

  • ネットショップの商品価格を毎日チェックして記録
  • 天気予報のデータを毎日保存
  • YouTubeの登録者数や再生回数を定期取得
  • ニュースサイトの見出しを毎朝まとめて保存

つまり、「毎日何かの情報を集めたい」というときにスクレイピング + スプレッドシートは最強の組み合わせなんです!




2. 必要なライブラリと事前準備

PythonでWebスクレイピングをして、Googleスプレッドシートに書き込むには、いくつかの**準備と道具(ライブラリ)**が必要です。ここでは、初心者でも迷わずにできるように、手順をひとつずつ紹介していきます。


● まずは必要なライブラリをインストールしよう

以下のライブラリを使います:

ライブラリ名役割
requestsWebサイトから情報を取得するため
beautifulsoup4HTMLを読みやすい形に変換してデータを取り出すため
gspreadGoogleスプレッドシートを操作するため
gspread_dataframepandasのデータをそのままスプレッドシートに書き込むため
oauth2clientGoogleの認証に使う
pandasデータを表形式(表=DataFrame)で管理するため

以下のコマンドをターミナルまたはコマンドプロンプトにコピペして実行しましょう:

pip install requests beautifulsoup4 gspread gspread_dataframe oauth2client pandas

● GoogleスプレッドシートのAPIを使う準備

GoogleのスプレッドシートをPythonから操作するには、「Googleに自分のプログラムを使ってもOKだよ!」と許可をもらうための設定が必要です。ちょっとだけ手間ですが、一度やれば使い回せます!

手順① Google Cloud Platformにアクセス

以下のサイトにアクセスします:
🔗 https://console.cloud.google.com/

  1. Googleアカウントでログインします。
  2. プロジェクトを作成(適当な名前でOK)

手順② Google Sheets APIを有効にする

  1. 「APIとサービス」→「ライブラリ」を選びます
  2. 「Google Sheets API」を検索して「有効にする」

手順③ 認証情報(credentials.json)をダウンロード

  1. 「認証情報」→「認証情報を作成」→「サービスアカウントキー」
  2. 「新しいサービスアカウントを作成」→「ロールは編集者などでOK」
  3. 「JSON形式」で作成してダウンロード
    👉 これが credentials.json です!大事に保管してください。

🎒このファイルは、プログラムと同じフォルダに置いておきましょう。

手順④ スプレッドシートの共有設定

スプレッドシートを作成したら、上記のサービスアカウントのメールアドレスに編集権限を付けて共有してください(例:example@project-id.iam.gserviceaccount.com)。

これで準備は完了です!
次は、実際にWebサイトから情報をスクレイピングする方法を見ていきましょう。




3. Webスクレイピングの基本コード

ここでは、Pythonを使ってWebサイトから情報を取り出す「スクレイピング」の基本を学んでいきます。

「難しそう…」と感じるかもしれませんが、必要なのはたった数行のコードだけ!
今回は、ニュースサイトの見出しを例にして、HTMLから必要な部分を取り出す方法をやさしく解説します。


● スクレイピングで使うライブラリ

スクレイピングに使う主なライブラリはこの2つです:

  • requests:Webページを取得(ダウンロード)する
  • BeautifulSoup:HTMLの中から情報を探して取り出す

では、実際のコードを見てみましょう。


● サンプルコード:ニュースサイトから記事タイトルを取得

import requests
from bs4 import BeautifulSoup

# スクレイピングしたいWebサイトのURL
url = "https://news.yahoo.co.jp/"

# サイトのHTMLを取得
response = requests.get(url)

# 正常に取得できたか確認(200 = OK)
if response.status_code == 200:
# HTMLの内容を解析
soup = BeautifulSoup(response.text, "html.parser")

# 見出しタグをすべて探す(Yahooニュースでは h3 タグが多い)
headlines = soup.find_all("h3")

print("記事タイトル一覧:")
for h in headlines:
print("-", h.get_text())
else:
print("Webページの取得に失敗しました。")

● 出力例(※実行時期によって変わります)

記事タイトル一覧:
- 政府が新たな対策を発表
- 台風の影響で大雨に警戒
- 人気アプリがアップデート

● ポイント解説

処理内容説明
requests.get(url)指定したURLのページを取得します
BeautifulSoup(response.text, "html.parser")ページのHTMLを解析して扱いやすくします
find_all("h3")h3タグをすべて取り出します(他のタグでもOK)
get_text()タグの中の文字だけを取り出します(HTMLタグは消えます)

● 注意ポイント

  • Webサイトによって見出しのタグ(h3, a, span など)は違います。
    必ずそのサイトのHTMLを確認しましょう(右クリック→「ページのソースを表示」)
  • スクレイピングが禁止されているサイトもあるので、利用規約は必ずチェック!



4. Googleスプレッドシートへ書き込む方法

前の章では、Webスクレイピングでニュースの見出しを取り出す方法を学びました。
今度は、そのデータをGoogleスプレッドシートに自動で書き込む方法を紹介します!


● 必要なライブラリをおさらい

Googleスプレッドシートにアクセス・操作するためには、以下のライブラリを使います:

  • gspread:スプレッドシートに接続・編集する
  • gspread_dataframe:pandasのDataFrameとスプレッドシートをやりとりする
  • oauth2client:Googleの認証情報を使う
  • pandas:データを表形式で扱う

● スプレッドシートへ書き込む基本コード

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
from gspread_dataframe import set_with_dataframe

# Google APIにアクセスするための範囲(スコープ)を設定
scope = [
"https://spreadsheets.google.com/feeds",
"https://www.googleapis.com/auth/drive"
]

# 認証情報の読み込み
credentials = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)

# gspreadでGoogleスプレッドシートに接続
client = gspread.authorize(credentials)

# スプレッドシートを開く(タイトル名を指定)
spreadsheet = client.open("スクレイピング結果") # ← スプレッドシート名は自分で作っておく!

# シートを指定(1枚目を使用)
worksheet = spreadsheet.sheet1

# サンプルデータ(スクレイピングした結果)
data = {
"記事タイトル": [
"政府が新たな対策を発表",
"台風の影響で大雨に警戒",
"人気アプリがアップデート"
]
}

# DataFrameに変換
df = pd.DataFrame(data)

# スプレッドシートに書き込む(既存データを上書き)
set_with_dataframe(worksheet, df)

● ここまでの流れまとめ

  1. credentials.jsonでGoogleアカウントにアクセス許可を得る
  2. gspreadでスプレッドシートに接続
  3. pandasのDataFrameを作成
  4. set_with_dataframe()で一括書き込み!

● 画面イメージ(スプレッドシートに書き込まれる内容)

記事タイトル
政府が新たな対策を発表
台風の影響で大雨に警戒
人気アプリがアップデート

● ワンポイントアドバイス

  • スプレッドシートの「共有設定」で、サービスアカウントのメールアドレスに「編集権限」を忘れずに!
  • すでにデータが入っている場合は上書きされるので注意してください。
  • worksheet.append_row()を使えば追記もできますが、DataFrame形式ならset_with_dataframe()が便利です。



5. 実践:スクレイピング→スプレッドシート書き込みまでの一連のコード例

これまで紹介してきた、

  • Webスクレイピングでデータを取得
  • Googleスプレッドシートに書き込む

この2つを1つのPythonスクリプトにまとめて、実際に動かせるようにしてみましょう!


● やることまとめ

今回のスクリプトでは、以下の流れを実行します:

  1. ニュースサイトのトップページにアクセス
  2. 記事の見出しを抜き出す
  3. pandasのDataFrameにまとめる
  4. Googleスプレッドシートに書き込む

● 実践コード全体(コピペOK!)

import requests
from bs4 import BeautifulSoup
import pandas as pd

import gspread
from oauth2client.service_account import ServiceAccountCredentials
from gspread_dataframe import set_with_dataframe

# スクレイピング対象のURL
url = "https://news.yahoo.co.jp/"

# Webページを取得
response = requests.get(url)

# ニュースの見出しをリストに格納
headlines = []
if response.status_code == 200:
soup = BeautifulSoup(response.text, "html.parser")
for h in soup.find_all("h3"):
title = h.get_text().strip()
if title:
headlines.append(title)
else:
print("Webページの取得に失敗しました")

# データをDataFrameに変換
df = pd.DataFrame({"記事タイトル": headlines})

# Google Sheets API認証の設定
scope = [
"https://spreadsheets.google.com/feeds",
"https://www.googleapis.com/auth/drive"
]
credentials = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
client = gspread.authorize(credentials)

# スプレッドシートの操作
spreadsheet = client.open("スクレイピング結果") # 自分で作ったスプレッドシート名
worksheet = spreadsheet.sheet1

# スプレッドシートにデータを書き込む
set_with_dataframe(worksheet, df)

print("スプレッドシートに書き込みが完了しました!")

● 実行前のチェックリスト ✅

  • credentials.json ファイルが同じフォルダにあるか確認
  • Googleスプレッドシートを事前に作成済みか確認(「スクレイピング結果」など)
  • サービスアカウントに編集権限を付与済みか確認

● 実行するとどうなる?

スクリプトを実行すると、Yahooニュースのトップページから見出しを取得し、Googleスプレッドシートの1枚目に記事タイトルの一覧が自動で書き込まれます


● 応用のヒント 💡

  • 天気サイトの気温データを毎日記録
  • ECサイトの商品価格を定期チェック
  • 毎朝スクリプトを自動実行(後ほど紹介するcronなどで実現)



6. エラー対処法とよくあるつまずきポイント

PythonでWebスクレイピングやGoogleスプレッドシート連携をしていると、最初のうちはエラーが出てしまうこともよくあります

でも大丈夫!
ここではよくあるエラーとその原因、そして対処方法を丁寧に解説していきます。


✅ よくあるエラーとその解決法


● ① FileNotFoundError: [Errno 2] No such file or directory: 'credentials.json'

原因:
認証ファイル credentials.json がプログラムと同じフォルダに置かれていない、またはファイル名が違う。

対処法:

  • ファイルが存在するか確認
  • 拡張子まで含めて正確に「credentials.json」かどうかをチェック

● ② gspread.exceptions.APIError: 403 PERMISSION_DENIED

原因:
スプレッドシートの共有設定で、サービスアカウントに編集権限が付いていない。

対処法:

  • スプレッドシートの「共有」ボタンから、
    xxxxx@project-id.iam.gserviceaccount.com というメールアドレスを編集者として追加

● ③ requests.exceptions.ConnectionError や Timeout

原因:
アクセス先のWebサイトに一時的に接続できない/ブロックされている。

対処法:

  • 時間を置いて再実行
  • headers を使って「ブラウザっぽく」アクセスする(例:User-Agentを追加)
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)

● ④ スプレッドシートに書き込んだデータの行列がズレる・空欄になる

原因:
DataFrameのデータに問題がある(空の行、特殊文字など)

対処法:

  • df.dropna() で空データを削除
  • 文字列が途中で改行されていないか確認(.strip() を使うときれいになります)

● ⑤ APIの呼び出し制限(Rate Limit)にひっかかる

原因:
Google Sheets APIには「一定時間内に何回まで」という制限があります。

対処法:

  • 書き込みの回数を減らす(1行ずつ書くより、一括書き込みがおすすめ)
  • set_with_dataframe() を使ってまとめて書き込む

🔰 トラブルを避けるコツ

  • 一度に動かそうとせず、少しずつ動作確認しながら書いていく
  • print() を多用して、どこで止まっているかチェック
  • 初回は「最小構成」で試す(データ1件だけ書き込むなど)

これで、よくあるエラーにも落ち着いて対処できるはずです!




7. まとめ

この記事では、Pythonを使ってWebサイトから情報を集め(スクレイピング)、それをGoogleスプレッドシートに自動で書き込む方法を、初心者の方にもわかりやすく紹介してきました。


📌 今回のポイントをおさらい

  • requests + BeautifulSoup を使えば、Webページから欲しい情報を自動で取り出せる
  • gspread + pandas を使えば、スプレッドシートへの書き込みも簡単にできる
  • Googleの**認証設定(credentials.json)**は最初だけちょっと手間。でも一度設定すれば何度でも使える
  • スプレッドシートにデータを書き込めると、日々の記録や業務自動化が一気にラクになる!

🧠 Python × Googleスプレッドシートは最強の自動化コンビ!

  • 「毎日手動でコピペしてる情報がある…」
  • 「表にまとめたいけど、作業が面倒…」

そんな悩みを持つ人にこそ、Pythonでのスクレイピング&スプレッドシート連携は大きな助けになります!


あわせて読みたい

Google Sheets APIの使い方や認証の流れ、gspreadの基本をもっと詳しく知りたい方はこちら。
👉 PythonでGoogleスプレッドシートを操作する方法(基本編)

スクレイピングの基礎をもう少し深掘りしたい方に。HTMLの構造とタグの選び方を解説!
👉 【Python入門】Webスクレイピングの基本|requestsとBeautifulSoupの使い方

Google Sheets以外にも、ローカルに保存する方法が知りたい人向け。
👉 【保存編】PythonでCSV・Excelファイルにデータを書き出す方法

よくある質問(Q&A)

Q
GoogleスプレッドシートのAPIは無料で使えますか?
A

はい、基本的な使い方であれば無料で使えます。
Googleは一定の回数まで無料でAPIを提供しており、スクレイピング結果を1日1回書き込む程度なら問題ありません。大量にリクエストを送る場合は制限に注意しましょう。

Q
credentials.jsonって何?どこから手に入れるの?
A

credentials.json は、あなたのPythonプログラムがGoogleスプレッドシートにアクセスするための**カギ(認証情報)**です。
Google Cloud ConsoleでAPIを有効にして、サービスアカウントを作成し、そこからダウンロードできます。

Q
スクレイピングしてもデータが取得できないのはなぜ?
A

以下のような理由が考えられます:

  • アクセス先のサイトがスクレイピングを禁止している
  • HTML構造が変わった(タグ名が違う)
  • JavaScriptで動的に生成されているサイト(この場合は Selenium などが必要)
  • User-Agent を設定していないためアクセスがブロックされている

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク