質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

454閲覧

スクレイピングにおけるリスト対応について

yasutin

総合スコア41

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/09/06 01:18

編集2022/09/06 18:26

前提

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>でも対応できるようにするためにはどうすればよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2022/09/06 01:26

エラーが出るタイミングで、age_and_sex や reviewなどの変数にどのような値が入っているのでしょうか。
yasutin

2022/09/06 02:13

今すべて確認しましたが、そのページ特有の特徴を持つレビューアーが確認できました。今までは年齢と性別の情報があるかないかで判断していましたが、このページのあるレビューアーは”年齢は入力しているが、性別を入力していない”ユーザーでした。この場合どうすればよいでしょうか?ifのところが関係してくるのでしょうか。
yasutin

2022/09/06 02:35

要素については、例えば60代男性であれば <span>60代 男性</span>となっていて、 60代とだけ書かれているレビューアーのは <span>60代</span>となっています。
TakaiY

2022/09/06 02:41

「うすればよいでしょうか」といわれても、そのデータをどうしたいかによるので、わかりません。年代にしても無いかもしれませんよね。 それぞれ、どのようにしたいのか考えて対応すればいいのではないかと思います。
TakaiY

2022/09/06 02:44

ああ、もしかして、<span>60代 男性</span> でも 、<span>60代</span>でも対応できるようにしたいってことですか?
TakaiY

2022/09/06 02:45

ちなみに、質問への回答はここではなくて、質問を編集して追記してください。
yasutin

2022/09/06 07:53

わかりました!失礼しました。
yasutin

2022/09/06 08:49

追記でも記しましたが一応返信いたします。<span>60代</span>でも対応できるようにしたいということです。言葉足らずですみません。
guest

回答1

0

ベストアンサー

いろいろ考えられますが、データをどこまで取得したいのかによりますね。

エラーの出た箇所をtry-exceptで囲んで、エラーのときは年齢だけだとして処理するのが簡単。 ただし、性別だけとかがあるとそこでエラーになる。

age_and_sex を正規表現でマッチングをかけて(\d)代 で年齢を、'男性' とか '女性で性別を取得するという方法だと、面倒ですが、綺麗な処理になるでしょう。

投稿2022/09/06 08:54

TakaiY

総合スコア12666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yasutin

2022/09/06 09:25

丁寧にありがとうございました。初めに記述していただいた方法からインスパイアされ、 if age_and_sex != "": if len(age_and_sex) == 2: [age,sex] = age_and_sex.split(" ") age = int(age[:2]) else: age = int((age_and_sex[0])[:3]) というようにしたらできました!ありがとうございました。
yasutin

2022/09/06 09:26

性別だけの時は無理ですが、今の技術では仕方ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問