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

楽天市場の商品レビューは、実は“お客様の本音データ”の宝庫です。
どんな点に満足しているのか、どんな場面で使われているのか、どんな理由で購入したのか。
こうしたリアルな声を分析することで、商品の魅力を再発見したり、改善ポイントを見つけたりすることができます。

でも、レビューをひとつひとつ手でコピーして集めるのは大変ですよね。
しかも楽天市場には公式APIがないため、レビューをまとめて取得するにはちょっと工夫が必要です。

そこでこの記事では、ワンポチでレビューを自動取得できるプログラムコードを紹介します。
さらに、そのデータをChatGPTで読み込み、利用シーン・感情・年齢層・購入動機などを自動で分析するプロンプトも公開しています。

励みになりますので、当記事をSNSやブログでご紹介お願いします。

注意点:楽天市場の規約について

楽天市場では、自動化されたツールによる商品購入行為が禁止されています。
レビューの取得そのものを直接禁止しているわけではありませんが、規約の趣旨を理解したうえで、自己責任かつ各自の判断にてご利用ください。

当社の事前の許可を得ることなく、自動化された手段(自動購入ツール・ロボットなどこれらに準ずる手段)を用いて商品を購入すること(商品ページ上の情報取得等を含む)

引用元 https://www.rakuten.co.jp/doc/info/rule/ichiba_shopping.html

目次

楽天市場レビュー取得の手順

  1. Google Colabでレビュー取得
  2. CSV(TSVでも可)ダウンロード
  3. Googleスプレッドにて分析

Google Colabでレビュー取得

Pythonの環境を用意しなくても使える「Google Colab」を使えば、PC環境に依存せずにレビューを取得することができます。
ブラウザさえあればOK。コードをコピペして実行するだけで、レビューが自動的にCSVファイルでダウンロードされます。

STEP
商品ページのコードを確認する

レビューURL https://review.rakuten.co.jp/item/1/商品コード/1.1/ から商品コードをコピーして後述するGoogle Colabプログラムコードの商品番号(12行目)に入力します。

STEP
レビューページを開く

商品ページ下部の「すべてのレビューを見る」をクリックしてレビューページを表示します。
ここが実際にスクレイピング対象となるページです。

STEP

新規ノートブックを作成して、以下のコードをコピペします。

STEP
Colabを実行してレビューを取得

「▶」ボタンをクリックしてコードを実行すると、レビューが自動的に収集されます。
完了後、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資料請求

楽天コンテンツページを活用したSEOサービス

弊社が自信を持ってお届けする楽天コンテンツページSEOサービスの資料をダウンロードできます。

無料で楽天ショップ運用のノウハウをお届け

アルル制作所の代表取締役 岩永が、楽天市場ショップの運用ノウハウを無料でお伝えします。

岩永の実績紹介

  • ブライダルECで年商3億円:楽天ノウハウならおまかせください
  • 記事執筆代行:記事代行サービスにて月100~300万円の運用実績
  • 職業訓練校講師:教えるのが大好きで職業訓練校講師をやっています

【こんな方におすすめ】

  • 楽天ショップの売上が伸び悩んでいる
  • RPP広告費の無駄遣いをなくしたい
  • データに基づいたwebマーケティングを行いたい

ご相談は、お問い合わせにてご相談ください。

この記事を書いた人

岩永 圭一のアバター 岩永 圭一 アルル制作所 代表取締役

2003年にECサイト「ウェディングアイテム」を立ち上げ、手作り結婚式を応援。年商3億円達成。2005年デザイン会社を設立。2社を譲渡後、2021年にアルル制作所を立ち上げ、オウンドメディア運営代行『記事スナイパー』を開始。これまで立ち上げた事業は、他にも中古ドメイン販売・キーワードツール・バー専門ホームページ制作・記事LP制作・レンタルスペース・撮影スタジオと多岐にわたる。

目次