前提
大学の研究でスクレイピングをしています。
楽天GORAの口コミ情報をpythonで収集し、エクセルに出力ているのですが、
classのない要素のスクレイピングができません。
https://booking.gora.golf.rakuten.co.jp/voice/detail/c_id/220024
実現したいこと
平均スコアの数字だけをスクレイピングしたいです。
下の例では、86の数字だけにしたいです。
発生している問題・エラーメッセージ
下のコードでは、プレー日などの部分も出力してしまいます。
86 2022/09/26 富士コースIN エンジョイ/カジュアル 中級者・上級者 (5) (3) (3) (4) (4) (4) (3) (3) 2022/08/10 箱根コースIN エンジョイ/カジュアル 中級者 (5) (5) (5) (5) (4) (5) (4) (4)
該当のソースコード
python
1import requests 2from bs4 import BeautifulSoup 3import time 4import re 5 6reviews = [] 7scores = [] 8 9length=1 10 11for j in range(1,5):#ページ範囲 12 url = "https://booking.gora.golf.rakuten.co.jp/voice/detail/c_id/220024/page/" + str(j) + "/" 13 14 html = requests.get(url) 15 soup = BeautifulSoup(html.content, "html.parser") 16 17 tmp_num = 1 18 tmp_nam = 1 19 for element in soup.select('.voiceContents'): #口コミ本文のスクレイピング 20 reviews.append(element.text) 21 tmp_num += 1 22 length += 1 23 24 topic=soup.find(class_="voiceDetail-sec02")#平均スコアのスクレイピング 25 for element in topic.find_all("td"): 26 scores.append(element.text) 27 tmp_nam += 1 28 length += 1 29 print(element.text) 30 31 32 33##以下、エクセル出力に関する部分 34import openpyxl 35 36wb = openpyxl.Workbook() #エクセルファイルを新規作成 37sheet = wb.active 38sheet.title = '箱根コース口コミ' #excelシート名の変更 39 40sheet["A1"].value = '口コミ' #テーブルタイトル 41sheet["B1"].value = '平均スコア' 42 43for i in range(1,length): 44 sheet.cell(column=1, row=i+1, value=reviews[i-1])#配列reviewsの要素をA列に出力 45 46for i in range(1,length): 47 sheet.cell(column=2, row=i+1, value=scores[i-1])#配列scoresの要素をB列に出力 48 49 50wb.save('函南ゴルフクラブ口コミ.xlsx') #というファイル名で保存 51 52wb.close() 53 54
まだ、初心者で不格好ですが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/28 12:37
2022/09/28 12:57
2022/09/29 16:02