前提
pythonで楽天市場のレビュー欄から、商品に対する評価、レビューアーの年齢、性別、投稿した日付をcsvファイルに収集するコードを書いています。
実現したいこと
1000件ほどのレビューを集められるようにしたい。現状集められたレビュー数は300件ほどです。
発生している問題・エラーメッセージ
[age,sex] = age_and_sex.split(" ") ValueError: not enough values to unpack (expected 2, got 1)
該当のソースコード
python
1#参考にしたwebサイト:https://onl.bz/umPGp1c (Seleniumを使ってスクレイピング – 商品レビュー編) 2 3import os 4import time 5import pandas as pd 6from selenium import webdriver 7import chromedriver_binary 8from selenium.webdriver.support.ui import WebDriverWait 9 10 11 12# 13#base 14# 15CURRENT_DIR = os.getcwd() 16 17ID = "270693_10007340"#店舗コード_商品ID 18URL = "https://review.rakuten.co.jp/item/1/" + ID + "/" 19#例:https://review.rakuten.co.jp/item/1/268158_10000003/1.1/(伊勢エビ) 20 21times = 25 22 23columns = ["score","age","sex","date"] 24 25df = pd.DataFrame(columns=columns) 26 27 28 29# 30#selenium 31# 32options = webdriver.ChromeOptions() 33browser = webdriver.Chrome(options=options) 34 35for i in range(times): 36 browser.get(URL + str(i+1) + ".1/") 37 38 reviews = browser.find_elements_by_css_selector("div.revRvwUserSec") 39 for review in reviews: 40 41 42 age_and_sex = review.find_elements_by_css_selector("span.revUserFaceDtlTxt span")[0].text 43 age = None 44 sex = "" 45 if age_and_sex != "": 46 [age,sex] = age_and_sex.split(" ") 47 age = int(age[:2]) 48 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 se = pd.Series([score,age,sex,date],columns)#Seriesでインデックスと一対一のデータを作る 52 df = df.append(se, columns) 53 54 time.sleep(1) 55 56df.to_csv("rakuten_review.csv",encoding="utf_8_sig") 57browser.quit() 58 59
試したこと
times = 20にすると問題なくできましたが、times = 25以上にしてしまうと必ずこのエラーメッセージが表示されてしまい調べましたが、リストの対応している数が合わないとのことでした。ですがなぜ20ページまでは問題なく処理されて25ページ以降がダメなのかは結局よくわからず質問させていただきました。初心者質問ですみません。
補足情報(FW/ツールのバージョンなど)
windows11、IDLE(python3.10-64bit)
追記に対する回答
ああ、もしかして、<span>60代 男性</span>
でも 、<span>60代</span>でも対応できるようにしたいってことですか?
ーはい、そうです。言葉足らずですみませんでした。<span>60代</span>でも対応できるようにするためにはどうすればよいでしょうか。
エラーが出るタイミングで、age_and_sex や reviewなどの変数にどのような値が入っているのでしょうか。
今すべて確認しましたが、そのページ特有の特徴を持つレビューアーが確認できました。今までは年齢と性別の情報があるかないかで判断していましたが、このページのあるレビューアーは”年齢は入力しているが、性別を入力していない”ユーザーでした。この場合どうすればよいでしょうか?ifのところが関係してくるのでしょうか。
要素については、例えば60代男性であれば <span>60代 男性</span>となっていて、
60代とだけ書かれているレビューアーのは <span>60代</span>となっています。
「うすればよいでしょうか」といわれても、そのデータをどうしたいかによるので、わかりません。年代にしても無いかもしれませんよね。
それぞれ、どのようにしたいのか考えて対応すればいいのではないかと思います。
ああ、もしかして、<span>60代 男性</span>
でも 、<span>60代</span>でも対応できるようにしたいってことですか?
ちなみに、質問への回答はここではなくて、質問を編集して追記してください。
わかりました!失礼しました。
追記でも記しましたが一応返信いたします。<span>60代</span>でも対応できるようにしたいということです。言葉足らずですみません。
回答1件
あなたの回答
tips
プレビュー