みなさん、こんにちは。どんぶラッコです。
今日はスクレイピングを使って楽天商品レビュー情報を収集する方法についてみていきましょう。
楽天では商品レビューを収集するのが一苦労です。ましてや競合の商品レビュー情報となるとAPI提供もされていません。
ということで、スクレイピング技術を使って商品レビューをかき集めるプログラムを書いてみました。
スクレイピング自体が禁止されているサイトもあるので注意してください。
楽天市場でも推奨されていませんが、禁止はされていないとの情報を発見したので今回実施しています。
また、サーバに負荷がかからないようsleep()関数などを使ってリクエスト間隔を調整するなどの配慮をしています。
楽天へのスクレイピングの問い合わせみたという記事はこちらです↓↓
今回実装に当たってはこちらの記事をめちゃくちゃ参考にしました
import os
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# ----------------------------------------------------------------
# 基本設定
# ----------------------------------------------------------------
CURRENT_DIR = os.getcwd()
# 店舗コード_商品ID の形でIDを指定
ID = '000000_00000000'
URL = 'https://review.rakuten.co.jp/item/1/' + ID + '/'
# 繰り返し回数
times = 20
columns = ['score', 'text', 'age', 'sex']
df = pd.DataFrame(columns=columns)
# ----------------------------------------------------------------
# Selenium 設定
# ----------------------------------------------------------------
options = webdriver.ChromeOptions()
browser = webdriver.Chrome(options=options)
for i in range(times):
browser.get(URL + str(i + 1) + '.1/')
reviews = browser.find_elements_by_css_selector("div.revRvwUserSec")
for review in reviews:
age_and_sex = review.find_elements_by_css_selector(
"span.revUserFaceDtlTxt span")[0].text
age = None
sex = ''
if age_and_sex != '':
[age, sex] = age_and_sex.split(' ')
age = int(age[:-1])
score = review.find_element_by_css_selector(
"span.revUserRvwerNum.value").text
text = review.find_element_by_css_selector(
"dd.revRvwUserEntryCmt.description").text
se = pd.Series([score, text, age, sex], columns)
df = df.append(se, columns)
time.sleep(2)
df.to_csv("output.csv", encoding='utf_8_sig')
browser.quit()
ID
に 店舗ID_商品ID
の形でIDを、そしてtimes
に取得するページ数を記入してください。
あとはひたすらぶん回すだけです。
今回はスクレイピング用ブラウザに Google Chromeを使っています。
みなさんも試してみてください!