python + Beautiful soupを使い、Amazonの商品のレビューを取得。Googleスプレッドシートにレビュー記事を保存するプログラムを考えてみた。
※本記事ではGoogleスプレッドシートに取得した結果を保存しますが、Googleスプレッドシートの細かい使用方法は記載しません。
↓udemyなら、トレンド技術から基礎技術まで幅広く学べます。返金保証もあるので、まずは気になるスキルをチェック
プログラムの概要
以下の手順でプログラムを作成していきます。
①対象のAmzaonの商品ページに遷移
②URLをレビュー記事に切り替える
③レビュー記事を取得する
④スプレッドシートを開く
⑤取得したレビューをスプレッドシートに書き込む
開発環境
OS Windows11 chromedriver-binary 114.0.5735.16.0 selenium 4.1.0 GoogleChrome 116.0.5845.141 beautifulsoup4 4.12.2
Amazonレビュー取得プログラム
黄色のマーカの箇所は、Googleスプレッドシートに関する箇所になります。Googleスプレッドシートに関する詳細はここでは記載しません。
URLは、実際のAmzon商品ページのURLを設定してください
amazon_review_scraping_google_spreadsheet.py
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import textwrap
# ChromeのWebDriverライブラリをインポート
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
#windows(chromedriver.exeのパスを設定)
from google.oauth2.service_account import Credentials
import gspread
# 認証のjsoファイルのパス
secret_credentials_json_oath = ''
#スプレッドシートIDを変数に格納する。
SPREADSHEET_KEY = ''
def get_amazon_page_info(url):
text = "" # 初期化
options = Options() # オプションを用意
options.add_argument('--incognito') # シークレットモードの設定を付与
# chromedriverのパスとパラメータを設定
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get(url) # chromeブラウザでurlを開く
driver.implicitly_wait(10) # 指定したドライバの要素が見つかるまでの待ち時間を設定
text = driver.page_source # ページ情報を取得
driver.quit() # chromeブラウザを閉じる
return text # 取得したページ情報を返す
# 全ページ分をリストにする
def get_all_reviews(url):
review_list = [] # 初期化
i = 1 # ループ番号の初期化
while True:
print(i,'page_search') # 処理状況を表示
i += 1 # ループ番号を更新
text = get_amazon_page_info(url) # amazonの商品ページ情報(HTML)を取得する
amazon_bs = BeautifulSoup(text, features='lxml') # HTML情報を解析する
reviews = amazon_bs.select('.review-text') # ページ内の全レビューのテキストを取得
for review in reviews: # 取得したレビュー数分だけ処理を繰り返す
review_list.append(review) # レビュー情報をreview_listに格納
next_page = amazon_bs.select('li.a-last a') # 「次へ」ボタンの遷移先取得
# 次のページが存在する場合
if next_page != []:
# 次のページのURLを生成
next_url = 'https://www.amazon.co.jp/' + next_page[0].attrs['href']
url = next_url # 次のページのURLをセットする
sleep(1) # 最低でも1秒は間隔をあける(サーバへ負担がかからないようにする)
else: # 次のページが存在しない場合は処理を終了
break
return review_list
#インポート時は実行されないように記載
if __name__ == '__main__':
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
credentials = Credentials.from_service_account_file(
secret_credentials_json_oath,
scopes=scopes
)
# Amzon商品ページ
url = ''
# URLをレビューページのものに書き換える
review_url = url.replace('dp', 'product-reviews')
# レビュー情報の取得
review_list = get_all_reviews(review_url)
gc = gspread.authorize(credentials)
# スプレッドシート(ブック)を開く
workbook = gc.open_by_key(SPREADSHEET_KEY)
# シートの一覧を取得する。(リスト形式)
worksheets = workbook.worksheets()
print(worksheets)
# シートを開く
worksheet = workbook.worksheet('シート1')
# 全データを表示
for i in range(len(review_list)):
review_text = textwrap.fill(review_list[i].text, 500)
#取得したレビューをスプレッドシートに書き込む
worksheet.update_cell( i+1,1, 'No.{} : '.format(i+1))
worksheet.update_cell(i+1, 2, review_text.strip())
まとめ
AmazonのレビューのURLを設定すればそのまま使えると思います。少し手間なのが、Googleスプレッドシートにかかわるところです。
Google Drive APIを使用しているので、Google Cloud Platformの利用登録が必要となります。アカウントがない方は作成する必要があり、無料枠で利用する場合もクレジットカードの登録が必要になるので少し手間がかかります。無料期間が1年間ありますが、無料使用料を超えると自動で課金されてしまうので注意してください。
詳細は、Googleの公式情報を参照願います。
↓udemyなら、トレンド技術から基礎技術まで幅広く学べます。返金保証もあるので、まずは気になるスキルをチェック
コメント