楽天市場の商品レビューを自動取得してChatGPTで分析する方法[プログラムコード付き]

楽天市場の商品レビューは、実は“お客様の本音データ”の宝庫です。
どんな点に満足しているのか、どんな場面で使われているのか、どんな理由で購入したのか。
こうしたリアルな声を分析することで、商品の魅力を再発見したり、改善ポイントを見つけたりすることができます。
でも、レビューをひとつひとつ手でコピーして集めるのは大変ですよね。
しかも楽天市場には公式APIがないため、レビューをまとめて取得するにはちょっと工夫が必要です。
そこでこの記事では、ワンポチでレビューを自動取得できるプログラムコードを紹介します。
さらに、そのデータをChatGPTで読み込み、利用シーン・感情・年齢層・購入動機などを自動で分析するプロンプトも公開しています。

励みになりますので、当記事をSNSやブログでご紹介お願いします。
注意点:楽天市場の規約について
楽天市場では、自動化されたツールによる商品購入行為が禁止されています。
レビューの取得そのものを直接禁止しているわけではありませんが、規約の趣旨を理解したうえで、自己責任かつ各自の判断にてご利用ください。
当社の事前の許可を得ることなく、自動化された手段(自動購入ツール・ロボットなどこれらに準ずる手段)を用いて商品を購入すること(商品ページ上の情報取得等を含む)
引用元 https://www.rakuten.co.jp/doc/info/rule/ichiba_shopping.html
楽天市場レビュー取得の手順
- Google Colabでレビュー取得
- CSV(TSVでも可)ダウンロード
- Googleスプレッドにて分析
Google Colabでレビュー取得
Pythonの環境を用意しなくても使える「Google Colab」を使えば、PC環境に依存せずにレビューを取得することができます。
ブラウザさえあればOK。コードをコピペして実行するだけで、レビューが自動的にCSVファイルでダウンロードされます。
レビューURL https://review.rakuten.co.jp/item/1/商品コード/1.1/ から商品コードをコピーして後述するGoogle Colabプログラムコードの商品番号(12行目)に入力します。
商品ページ下部の「すべてのレビューを見る」をクリックしてレビューページを表示します。
ここが実際にスクレイピング対象となるページです。


「▶」ボタンをクリックしてコードを実行すると、レビューが自動的に収集されます。
完了後、rakuten_reviews.csv
というファイルが生成され、自動的にダウンロードされます。
このファイルには「評価・短評・本文・名前・性別・年代・日付」のデータがすべて含まれています。
プログラムコード
コード全文は、以下を参照ください。
!pip install beautifulsoup4 requests lxml pandas
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import re
from google.colab import files
import csv
"""商品番号"""
"""https://review.rakuten.co.jp/item/1/ここのコードを入力/1.1/"""
item_code = "232442_10002514"
def fetch_review_page(item_code, page_num):
"""楽天レビュー1ページを取得"""
url = f"https://review.rakuten.co.jp/item/1/{item_code}?p={page_num}#itemReviewList"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
r = requests.get(url, headers=headers)
if r.status_code != 200:
print(f"⚠️ ページ取得失敗: {url}")
return None
return r.text
def parse_reviews(html):
"""レビューHTMLを解析してデータ抽出"""
soup = BeautifulSoup(html, "lxml")
review_divs = soup.find_all("div", class_=re.compile(r"container--_"))
results = []
for div in review_divs:
rating_el = div.find("span", class_=re.compile(r"number-wrapper"))
rating = rating_el.get_text(strip=True) if rating_el else ""
date_el = div.find("div", class_=re.compile(r"text-display--.*size-small.*color-gray-dark"))
date = date_el.get_text(strip=True) if date_el else ""
name_el = div.find("div", class_=re.compile(r"reviewer-name"))
name = name_el.get_text(strip=True) if name_el else ""
# 性別・年代抽出
info_els = div.find_all("div", class_=re.compile(r"text-display--.*size-small.*color-gray-dark"))
gender, age = "", ""
for el in info_els:
text = el.get_text(strip=True)
if text in ["男性", "女性"]:
gender = text
elif re.match(r"\d{2}代", text) or text == "70代以上":
age = text
short_comment_el = div.find("div", class_=re.compile(r"text-display--.*type-header"))
short_comment = short_comment_el.get_text(strip=True) if short_comment_el else ""
body_el = div.find("div", class_=re.compile(r"(no-ellipsis|white-space-pre-line)"))
body = body_el.get_text(strip=True).replace("\n", " ") if body_el else ""
if not (body or short_comment or rating):
continue
results.append({
"評価": rating,
"短評": short_comment,
"本文": body,
"名前": name,
"性別": gender,
"年代": age,
"日付": date,
})
return results
def fetch_all_reviews(item_code, max_pages=50):
"""ページを順番にクロールして全レビュー取得(1秒スリープあり)"""
all_reviews = []
for p in range(1, max_pages + 1):
print(f"📄 ページ {p} 取得中...")
html = fetch_review_page(item_code, p)
if not html:
break
reviews = parse_reviews(html)
if not reviews:
print(f"⚠️ ページ {p} にレビューなし。終了。")
break
all_reviews.extend(reviews)
time.sleep(1)
print(f"✅ 合計 {len(all_reviews)} 件のレビューを取得しました。")
return all_reviews
# === 実行 ===
reviews = fetch_all_reviews(item_code, max_pages=10)
# DataFrame化
df = pd.DataFrame(reviews, columns=["評価", "短評", "本文", "名前", "性別", "年代", "日付"])
# CSV保存(カンマ区切り)
output_path = "rakuten_reviews.csv"
df.to_csv(
output_path,
index=False,
encoding="utf-8-sig", # Excelで文字化けしにくい
quoting=csv.QUOTE_MINIMAL # カンマや改行を含むセルを適切にクオート
)
print("💾 CSVファイルを保存しました。自動的にダウンロードを開始します...")
files.download(output_path)
ChatGPTで分析する
ダウンロードしたCSVファイルをChatGPTにアップロードすることで、レビューの自動分析ができます。
以下のような指示を入力すれば、分析結果を表やリスト形式で出力できます。
ダウンロードされたCSVファイルをChatGPTに貼り付けて、分析を指示してみましょう。
添付した楽天レビューデータをすべて読み込んで、商品の利用シーンをリストアップしてください。
似た利用シーンはまとめてください。コードウィンドウで出力して、それ以外は出力しないでください。
ヘッダー:
評価 短評 本文 名前 性別 年代 日付
添付した楽天レビューデータをすべて読み込んで、性別ごとの年齢を一覧表にしてください。それ以外は出力しないでください。 ヘッダー: 評価 短評 本文 名前 性別 年代 日付
出力例:
性別 年代 件数
女性 30代 2
女性 40代 5
女性 50代 16
女性 60代 11
女性 70代以上 1
男性 20代 2
男性 30代 3
男性 40代 2
男性 50代 9
男性 60代 1
添付された楽天レビューの本文・短評をすべて読み込み、ChatGPT自身の自然言語理解に基づいて感情語を抽出し、ポジティブ/ネガティブそれぞれの感情表現と出現件数を一覧化してください。
添付された楽天レビューの本文・短評をすべて読み込み、ChatGPT自身の自然言語理解に基づいて動機を表す文章を抽出し、実際に動機が書かれている行だけを抽出してください。
出力形式:
行番号 動機 本文抜粋
12 プレゼント用に購入 母の日のプレゼントとして購入しました。とても喜んでくれました。
5 リピート購入 以前購入してよかったのでリピートしました。
まとめ
この手順を使えば、楽天市場の商品レビューを自動で収集し、ChatGPTを使って「購入理由・感情・ターゲット層・利用シーン」などの市場調査や自社商品分析ができます。
レビューは単なる感想ではなく、商品改善のヒントそのものです。レビューの声を“データ”として読み解き、次の一手に生かしていきましょう。
楽天SEO資料請求

無料で楽天ショップ運用のノウハウをお届け
アルル制作所の代表取締役 岩永が、楽天市場ショップの運用ノウハウを無料でお伝えします。
岩永の実績紹介
- ブライダルECで年商3億円:楽天ノウハウならおまかせください
- 記事執筆代行:記事代行サービスにて月100~300万円の運用実績
- 職業訓練校講師:教えるのが大好きで職業訓練校講師をやっています
【こんな方におすすめ】
- 楽天ショップの売上が伸び悩んでいる
- RPP広告費の無駄遣いをなくしたい
- データに基づいたwebマーケティングを行いたい
ご相談は、お問い合わせにてご相談ください。