こちらのサイトを参考にレビューのスクレイピングをやっているのですが, できれば星5のレビューのみを抽出したいと考えています.
当方スクレイピング初心者のため, コードにどのような変更を行えば良いか教えていただきたいです.
python
1from time import sleep 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4from bs4 import BeautifulSoup 5import textwrap 6import csv 7 8#windows(chromedriver.exeのパスを設定) 9chrome_path = r'C:\Users\デスクトップ\python\selenium_test\chromedriver' 10 11#mac 12#chrome_path = 'C:/Users/デスクトップ/python/selenium_test/chromedriver' 13 14# amazonのレビュー情報をseleniumで取得する_引数:amazonの商品URL 15def get_amazon_page_info(url): 16 text = "" # 初期化 17 options = Options() # オプションを用意 18 options.add_argument('--incognito') # シークレットモードの設定を付与 19 # chromedriverのパスとパラメータを設定 20 driver = webdriver.Chrome(executable_path=chrome_path,options=options) 21 driver.get(url) # chromeブラウザでurlを開く 22 driver.implicitly_wait(10) # 指定したドライバの要素が見つかるまでの待ち時間を設定 23 text = driver.page_source # ページ情報を取得 24 25 driver.quit() # chromeブラウザを閉じる 26 27 return text # 取得したページ情報を返す 28 29# 全ページ分をリストにする 30def get_all_reviews(url): 31 review_list = [] # 初期化 32 i = 1 # ループ番号の初期化 33 while True: 34 print(i,'page_search') # 処理状況を表示 35 i += 1 # ループ番号を更新 36 text = get_amazon_page_info(url) # amazonの商品ページ情報(HTML)を取得する 37 amazon_bs = BeautifulSoup(text, features='lxml') # HTML情報を解析する 38 reviews = amazon_bs.select('.review-text') # ページ内の全レビューのテキストを取得 39 40 for review in reviews: # 取得したレビュー数分だけ処理を繰り返す 41 review_list.append(review) # レビュー情報をreview_listに格納 42 43 next_page = amazon_bs.select('li.a-last a') # 「次へ」ボタンの遷移先取得 44 45 # 次のページが存在する場合 46 if next_page != []: 47 # 次のページのURLを生成 48 next_url = 'https://www.amazon.co.jp/' + next_page[0].attrs['href'] 49 url = next_url # 次のページのURLをセットする 50 51 sleep(1) # 最低でも1秒は間隔をあける(サーバへ負担がかからないようにする) 52 else: # 次のページが存在しない場合は処理を終了 53 break 54 55 return review_list 56 57#インポート時は実行されないように記載 58if __name__ == '__main__': 59 60 # Amzon商品ページ 61 url = 'https://www.amazon.co.jp/%E6%89%8B%E6%8C%87%E6%B6%88%E6%AF%92%E5%89%A4%E3%80%91%E3%83%8F%E3%83%B3%E3%83%89%E3%82%B9%E3%82%AD%E3%83%83%E3%82%B7%E3%83%A5EX-%E3%81%A4%E3%81%91%E3%81%8B%E3%81%88%E7%94%A8-800ml-%E8%8A%B1%E7%8E%8B%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%8C%87%E5%AE%9A%E5%8C%BB%E8%96%AC%E9%83%A8%E5%A4%96%E5%93%81/dp/B005RUI15O/' 62 63 # URLをレビューページのものに書き換える 64 review_url = url.replace('dp', 'product-reviews') 65 # レビュー情報の取得 66 review_list = get_all_reviews(review_url) 67 68 #CSVにレビュー情報の書き出し 69 with open('data/sample.csv','w') as f: 70 writer = csv.writer(f, lineterminator='\n') 71 72 # 全データを表示 73 for i in range(len(review_list)): 74 csvlist=[] 75 review_text = textwrap.fill(review_list[i].text, 80) 76 #データ作成 77 csvlist.append('No.{} : '.format(i+1)) # 便宜上「No.XX」の文字列を作成 78 csvlist.append(review_text.strip()) # レビューテキストの先頭・末尾の空白文字を除去 79 # 出力 80 writer.writerow(csvlist) 81 # ファイルクローズ 82 f.close()
具体的に何で詰まっているのでしょうか?
星5のレビューを抽出したいため、星の部分を表示しているHTML上でのstarという変数?に着目してレビューを選別したいのですが、やり方がわからず苦戦しています
あなたの回答
tips
プレビュー