1. はじめに
こんにちは!今回は「PythonでWebスクレイピングをして、Googleスプレッドシートにデータを書き込む方法」について、初心者向けにやさしく紹介していきます。
● スクレイピングってなに?
まず「スクレイピング」とは、Webサイトのページから自動で情報を集めることを言います。
たとえば、ニュースサイトから最新の記事タイトルだけを集めたり、天気予報の情報を自動で取得したりできるんです。
手作業で毎回コピペするのって大変ですよね?
Pythonを使えば、そういった「繰り返し作業」を一気に自動化できるんです!
● スプレッドシートに書き込むってどういうこと?
スクレイピングで集めたデータを、あとで見返したり、集計したりしたいときには「表形式で保存」できると便利ですよね。
そんなときにぴったりなのが Googleスプレッドシート です!
スプレッドシートなら、
- Webブラウザからいつでも確認できる
- 複数人で共有・編集できる
- Excelのように並べ替えやグラフ化も簡単!
しかも、Pythonを使えば自動で書き込むこともできるんです!
● どんな場面で役に立つの?
たとえば、こんな使い方ができます:
- ネットショップの商品価格を毎日チェックして記録
- 天気予報のデータを毎日保存
- YouTubeの登録者数や再生回数を定期取得
- ニュースサイトの見出しを毎朝まとめて保存
つまり、「毎日何かの情報を集めたい」というときにスクレイピング + スプレッドシートは最強の組み合わせなんです!
2. 必要なライブラリと事前準備
PythonでWebスクレイピングをして、Googleスプレッドシートに書き込むには、いくつかの**準備と道具(ライブラリ)**が必要です。ここでは、初心者でも迷わずにできるように、手順をひとつずつ紹介していきます。
● まずは必要なライブラリをインストールしよう
以下のライブラリを使います:
| ライブラリ名 | 役割 |
|---|---|
requests | Webサイトから情報を取得するため |
beautifulsoup4 | HTMLを読みやすい形に変換してデータを取り出すため |
gspread | Googleスプレッドシートを操作するため |
gspread_dataframe | pandasのデータをそのままスプレッドシートに書き込むため |
oauth2client | Googleの認証に使う |
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/
- Googleアカウントでログインします。
- プロジェクトを作成(適当な名前でOK)
手順② Google Sheets APIを有効にする
- 「APIとサービス」→「ライブラリ」を選びます
- 「Google Sheets API」を検索して「有効にする」
手順③ 認証情報(credentials.json)をダウンロード
- 「認証情報」→「認証情報を作成」→「サービスアカウントキー」
- 「新しいサービスアカウントを作成」→「ロールは編集者などでOK」
- 「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)
● ここまでの流れまとめ
credentials.jsonでGoogleアカウントにアクセス許可を得る- gspreadでスプレッドシートに接続
- pandasのDataFrameを作成
set_with_dataframe()で一括書き込み!
● 画面イメージ(スプレッドシートに書き込まれる内容)
| 記事タイトル |
|---|
| 政府が新たな対策を発表 |
| 台風の影響で大雨に警戒 |
| 人気アプリがアップデート |
● ワンポイントアドバイス
- スプレッドシートの「共有設定」で、サービスアカウントのメールアドレスに「編集権限」を忘れずに!
- すでにデータが入っている場合は上書きされるので注意してください。
worksheet.append_row()を使えば追記もできますが、DataFrame形式ならset_with_dataframe()が便利です。
5. 実践:スクレイピング→スプレッドシート書き込みまでの一連のコード例
これまで紹介してきた、
- Webスクレイピングでデータを取得
- Googleスプレッドシートに書き込む
この2つを1つのPythonスクリプトにまとめて、実際に動かせるようにしてみましょう!
● やることまとめ
今回のスクリプトでは、以下の流れを実行します:
- ニュースサイトのトップページにアクセス
- 記事の見出しを抜き出す
- pandasのDataFrameにまとめる
- 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)
- QGoogleスプレッドシートの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の商品ページをご確認ください。