前提
楽天のレビューからレビューアーの名前をスクレイピングしたいと考えています。
実現したいこと
・find_element_ を用いてレビューアーの名前を取得したい。
発生している問題・エラーメッセージ
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#revRvwSec > div.revRvwMain > div > div.revRvwUserSecCnt > div:nth-child(1) > div.revRvwUserHead > ul > li.revUserFaceDtl > dl > dt > a"}
該当のソースコード
python
1import os 2import time 3import pandas as pd 4from selenium import webdriver 5import chromedriver_binary 6from selenium.webdriver.support.ui import WebDriverWait 7 8 9CURRENT_DIR = os.getcwd() 10 11#https://review.rakuten.co.jp/item/1/333216_10001503 ワイヤレスイヤホン 12 13ID = "333216_10001503"#ワイヤレスイヤホン 14URL = "https://review.rakuten.co.jp/item/1/" + ID + "/" 15#例:https://review.rakuten.co.jp/item/1/268158_10000003/1.1/(伊勢エビ) 16 17times = 10 18 19columns = ["name","score","age","sex","date","text"] 20df = pd.DataFrame(columns=columns) 21 22# 23#selenium 24# 25op = webdriver.ChromeOptions() 26browser = webdriver.Chrome(options=op) 27 28for i in range(times): 29 browser.get(URL + str(i) + ".1/") 30 31 reviews = browser.find_elements_by_css_selector("div.revRvwUserSec") 32 for review in reviews: 33 age_and_sex = review.find_elements_by_css_selector("span.revUserFaceDtlTxt span")[0].text 34 age = None 35 sex = "" 36 if age_and_sex != "": 37 li = age_and_sex.split() 38 if len(li) == 2: 39 age = li[0][:2] 40 sex_p = li[1] 41 if sex_p == "男性": 42 sex = 0 43 else: 44 sex = 1 45 else: 46 age = li[0] 47 48 name = review.find_element_by_css_selector("#revRvwSec > div.revRvwMain > div > div.revRvwUserSecCnt > div:nth-child(1) > div.revRvwUserHead > ul > li.revUserFaceDtl > dl > dt > a").text 49 score = review.find_element_by_css_selector("span.revUserRvwerNum.value").text 50 date = review.find_element_by_css_selector("span.revUserEntryDate.dtreviewed").text 51 text = review.find_element_by_css_selector("dd.revRvwUserEntryCmt.description").text 52 se = pd.Series([name,score,age,sex,date,text],columns) 53 df = df.append(se, columns) 54 if name: 55 print(name) 56 57 58 time.sleep(1) 59 60df.to_csv("review_ear_all.csv",encoding="utf_8_sig") 61browser.quit() 62
試したこと
find_element_by_css_selectorとしたところからそのような要素はみつからないというエラーメッセージから、もしnameがあればprint(name)をするというようにデバッグを試みたが、改善されなかった。
また、最初のレビューアーの要素は取得できたことからそのレビューアー固有の要素を指定してしまっているのではないかと思った。そこでfind_element_by_tag_name("a")としてみたが、ほかの要素を取得してしまい、改善されなかった。
レビューアーの名前のみを取得する指定方法を教えていただきたい。
補足情報(FW/ツールのバージョンなど)
windows11
IDLE
回答2件