teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

質問をより具体的に

2018/12/04 14:02

投稿

menuett
menuett

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- [Python]楽天市場からスクレイピングでデータを自動取得したいです。
1
+ 楽天市場からスクレイピングでデータを自動取得したいです。そのあとCSVに保存。
body CHANGED
File without changes

5

エラーの内容の追加

2018/12/04 14:02

投稿

menuett
menuett

スコア15

title CHANGED
File without changes
body CHANGED
@@ -43,8 +43,53 @@
43
43
  Starting to get reviews...
44
44
 
45
45
  NoSuchElementException Traceback (most recent call last)
46
+ **#追加部分↓**
47
+ <ipython-input-14-43bd36a04d9d> in <module>()
48
+ 25 #dfつくる
49
+ 26 for review in reviews:
50
+ ---> 27 score=review.find_element_by_css_selector("span.revEntryAnsNum").text
51
+ 28 text=review.find_element_by_css_selector("dd.revRvwUserEntryCmt.description").text
52
+ 29 se=pd.Series([score,text],columns)
46
53
 
54
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element_by_css_selector(self, css_selector)
55
+ 428 element = element.find_element_by_css_selector('#foo')
56
+ 429 """
57
+ --> 430 return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
58
+ 431
59
+ 432 def find_elements_by_css_selector(self, css_selector):
47
60
 
61
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element(self, by, value)
62
+ 657
63
+ 658 return self._execute(Command.FIND_CHILD_ELEMENT,
64
+ --> 659 {"using": by, "value": value})['value']
65
+ 660
66
+ 661 def find_elements(self, by=By.ID, value=None):
67
+
68
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
69
+ 631 params = {}
70
+ 632 params['id'] = self._id
71
+ --> 633 return self._parent.execute(command, params)
72
+ 634
73
+ 635 def find_element(self, by=By.ID, value=None):
74
+
75
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
76
+ 319 response = self.command_executor.execute(driver_command, params)
77
+ 320 if response:
78
+ --> 321 self.error_handler.check_response(response)
79
+ 322 response['value'] = self._unwrap_value(
80
+ 323 response.get('value', None))
81
+
82
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
83
+ 240 alert_text = value['alert'].get('text')
84
+ 241 raise exception_class(message, screen, stacktrace, alert_text)
85
+ --> 242 raise exception_class(message, screen, stacktrace)
86
+ 243
87
+ 244 def _value_or_default(self, obj, key, default):
88
+
89
+ NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"span.revEntryAnsNum"}
90
+ (Session info: headless chrome=70.0.3538.110)
91
+ (Driver info: chromedriver=2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90),platform=Windows NT 10.0.17134 x86_64)
92
+
48
93
  **このように2ページ目以降は取得できません。
49
94
  この状況の解決方法を教えていただきたいです。  よろしくお願いします。**
50
95
  ```Python

4

なし

2018/12/04 12:21

投稿

menuett
menuett

スコア15

title CHANGED
File without changes
body CHANGED
File without changes

3

タイトルを変更

2018/12/04 11:30

投稿

menuett
menuett

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- [Python]スクレイピングで自動的にデータを取得したい
1
+ [Python]楽天市場からスクレイピングでデータを自動取得したいです。
body CHANGED
@@ -1,4 +1,4 @@
1
- スクレイピングで楽天市場から商品レビューと参考になった人数を自動で取得しようとしています。
1
+ Pythonスクレイピングで楽天市場から商品レビューと参考になった人数を自動で取得しようとしています。
2
2
  以前はPhantomJSを使っていたのですが、seleniumでのサポートが終わったのでheadless Chromeで代用しようとしています。
3
3
  やっている流れ
4
4
  1.楽天市場のレビューを取得したいページに行きます。

2

バージョン、実行環境の追記

2018/12/03 14:37

投稿

menuett
menuett

スコア15

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,8 @@
10
10
  csvには、参考になった人数,レビュー本文といった形式で保存します。
11
11
  ※参考になった人数が空の場合は0とする。
12
12
  実行すると1ページ目はうまく取得できるのですが、2ページ目以降になると取得できません。
13
+ Pythonのバージョンは3.6.5です。
14
+ Windouws10,jupyter notebookで作成しました。
13
15
 
14
16
  ---
15
17
  実行結果

1

全体的に質問内容を修正

2018/12/03 14:29

投稿

menuett
menuett

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- 楽天のレビューをスクレイピングで期間も指定して取得したい
1
+ [Python]スクレイピングで自動的にデータを取得したい
body CHANGED
@@ -1,9 +1,50 @@
1
- スクレイピングで楽天から商品レビューと参考になった人数を自動で取得しようとしています。
1
+ スクレイピングで楽天市場から商品レビューと参考になった人数を自動で取得しようとしています。
2
+ 以前はPhantomJSを使っていたのですが、seleniumでのサポートが終わったのでheadless Chromeで代用しようとしています。
3
+ やっている流れ
4
+ 1.楽天市場のレビューを取得したいページに行きます。
5
+ 2.そのページのURLをコピーします。
6
+ 3.pageはページ数で最初は1にしておきます。pathは楽天レビューの「次の15件」のボタンのXpathです。
2
- 次の15件があるならURLをどり、ないならbreakしま
7
+ 4.「次の15件そのページにらループ、なかったらbreak
8
+ ※なぜか「次の15件」のXpathが最初のページ以外違ったので、最後の方でpathを更新しています。
9
+ 5.CSVに保存します。
3
- 以下のソースでcsvに参考になった人数,レビュー本文といった形式で保存します。
10
+ csvには、参考になった人数,レビュー本文といった形式で保存します。
11
+ ※参考になった人数が空の場合は0とする。
4
- ただ実行するとエラが出てしま、そ解決法を教えてほしいです。
12
+ 実行すると1ペジ目はまく取得きるのですが、2ページ目以降になると取得できません
13
+
14
+ ---
15
+ 実行結果
16
+ ---------------------------page: 1 -----------------------------
17
+
18
+ Starting to get reviews...
19
+
20
+ score text
21
+ 0 39 この商品は色違いで3点目の購入です。今回はブラックを購入しました。\nよく伸びるので曲げ伸ば...
22
+ 1 23 2016年10月にツイル&デニムのL、11月にデニムLLを。ツイル(ボルドー)は着衣の繊維が...
23
+ 2 19 ずっと気になっていてやっと買えました。\n2592円(税抜)が24時間限定50%ポイント還元...
24
+ 3 6 今年の冬は特に寒かったけどこのパンツで温かく過ごせました。何本も購入したのでほぼ毎日のように...
25
+ 4 9 この冬大活躍しました。\n結局何回もリピ買いして計6本。穿くときのヒヤッと感が無いのも◎だし...
26
+ 5 6 167cm、56kgでお肉は下半身に付く方です。\n以前ボルドーのLを購入してウェストも丈も...
27
+ 6 6 レビューがいいので安心して購入しました。\n155センチ48キロ、サイズはSかMで、モノによ...
28
+ 7 6 裏フリースの物を買っといてなんですが、あんまり足が太く見えたら嫌だなぁ~と思いワインのSサイ...
29
+ 8 4 ⇒身長163cm 体重55kgでLを選びました。\n最初はMをお願いしたのですが、\nウエス...
5
- た、期間を指定レビューを取得できる方法あったらそれも教えてほしです。
30
+ 9 4 本日届きました。\nレビューを見ると 「サイズにばらつが有」「生地伸びる 伸びな」不...
31
+ 10 4 165センチ、48キロ。普段のパンツはMで、ベージュとオリーブのMを購入。暖かいのに、シルエ...
32
+ 11 3 161センチ52キロでMサイズを購入しました。\n骨盤が張っていてお尻も大きく太ももも太めな...
33
+ 12 3 170cm55キロ、お尻が大き目なのでサイズLを購入。\nコーデュロイ ブラックです。\nス...
34
+ 13 4 2018verのツイルの黒を購入しました。2年前に買ったMはちょうど良かったのですが、今回の...
35
+ 14 3 168cm、55kg、トップスはM、ボトムスは物によりけりで、デニムは普段24インチです。...
36
+ next url:https://review.rakuten.co.jp/item/1/200612_10056893/2.1/
37
+ Moving to next page......
38
+
39
+ ---------------------------page: 2 -----------------------------
40
+
41
+ Starting to get reviews...
42
+
43
+ NoSuchElementException Traceback (most recent call last)
44
+
45
+
46
+ **このように2ページ目以降は取得できません。
6
- 期間は2016年4月~2017年4月と感じで指定したいです。
47
+ この状況の解決方法を教えていただきたいです。  よろしくお願いします。**
7
48
  ```Python
8
49
  from selenium import webdriver
9
50
  from selenium.webdriver.chrome.options import Options
@@ -44,91 +85,13 @@
44
85
  driver.implicitly_wait(10)
45
86
  print("Moving to next page......")
46
87
  time.sleep(10)
47
- path="//*[@id='revRvwSec']/div[1]/div/div[2]/div[16]/div/div/a[6]"
88
+ path="//*[@id='revRvwSec']/div[1]/div/div[2]/div[16]/div/div/a[6]" #「次の15件」のXpathが最初のページ以外違ったので、最後の行でpathを更新しています。
48
89
  else:
49
90
  break
50
-
91
+ #CSVに保存
51
92
  print(" ")
52
93
  print("Saving as csv.....")
53
94
  print("")
54
95
  df.to_csv("review.csv", encoding = 'utf_8_sig')
55
96
  print("Processing Exit")
56
- ```
97
+ ```
57
- 実行したときのエラーです。
58
- 根本的にソースがまずそうなら、正しいコードを教えていたたきだいです。
59
-
60
-
61
- ---------------------------page: 1 -----------------------------
62
-
63
- Starting to get reviews...
64
-
65
- score text
66
- 0 39 この商品は色違いで3点目の購入です。今回はブラックを購入しました。\nよく伸びるので曲げ伸ば...
67
- 1 23 2016年10月にツイル&デニムのL、11月にデニムLLを。ツイル(ボルドー)は着衣の繊維が...
68
- 2 19 ずっと気になっていてやっと買えました。\n2592円(税抜)が24時間限定50%ポイント還元...
69
- 3 6 今年の冬は特に寒かったけどこのパンツで温かく過ごせました。何本も購入したのでほぼ毎日のように...
70
- 4 9 この冬大活躍しました。\n結局何回もリピ買いして計6本。穿くときのヒヤッと感が無いのも◎だし...
71
- 5 6 167cm、56kgでお肉は下半身に付く方です。\n以前ボルドーのLを購入してウェストも丈も...
72
- 6 6 レビューがいいので安心して購入しました。\n155センチ48キロ、サイズはSかMで、モノによ...
73
- 7 6 裏フリースの物を買っといてなんですが、あんまり足が太く見えたら嫌だなぁ~と思いワインのSサイ...
74
- 8 4 ⇒身長163cm 体重55kgでLを選びました。\n最初はMをお願いしたのですが、\nウエス...
75
- 9 4 本日届きました。\nレビューを見ると 「サイズにばらつきが有る」「生地が伸びる 伸びない」不...
76
- 10 4 165センチ、48キロ。普段のパンツはMで、ベージュとオリーブのMを購入。暖かいのに、シルエ...
77
- 11 3 170cm55キロ、お尻が大き目なのでサイズLを購入。\nコーデュロイ ブラックです。\nス...
78
- 12 4 2018verのツイルの黒を購入しました。2年前に買ったMはちょうど良かったのですが、今回の...
79
- 13 3 168cm、55kg、トップスはM、ボトムスは物によりけりで、デニムは普段24インチです。...
80
- 14 1 リピート買いしています。これで3着目。\nキャメルLとデニムLL持ってました。\n今回はデニ...
81
- next url:https://review.rakuten.co.jp/item/1/200612_10056893/2.1/
82
- Moving to next page......
83
-
84
- ---------------------------page: 2 -----------------------------
85
-
86
- Starting to get reviews...
87
-
88
- ---------------------------------------------------------------------------
89
- NoSuchElementException Traceback (most recent call last)
90
- <ipython-input-14-43bd36a04d9d> in <module>()
91
- 25 #dfつくる
92
- 26 for review in reviews:
93
- ---> 27 score=review.find_element_by_css_selector("span.revEntryAnsNum").text
94
- 28 text=review.find_element_by_css_selector("dd.revRvwUserEntryCmt.description").text
95
- 29 se=pd.Series([score,text],columns)
96
-
97
- ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element_by_css_selector(self, css_selector)
98
- 428 element = element.find_element_by_css_selector('#foo')
99
- 429 """
100
- --> 430 return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
101
- 431
102
- 432 def find_elements_by_css_selector(self, css_selector):
103
-
104
- ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element(self, by, value)
105
- 657
106
- 658 return self._execute(Command.FIND_CHILD_ELEMENT,
107
- --> 659 {"using": by, "value": value})['value']
108
- 660
109
- 661 def find_elements(self, by=By.ID, value=None):
110
-
111
- ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
112
- 631 params = {}
113
- 632 params['id'] = self._id
114
- --> 633 return self._parent.execute(command, params)
115
- 634
116
- 635 def find_element(self, by=By.ID, value=None):
117
-
118
- ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
119
- 319 response = self.command_executor.execute(driver_command, params)
120
- 320 if response:
121
- --> 321 self.error_handler.check_response(response)
122
- 322 response['value'] = self._unwrap_value(
123
- 323 response.get('value', None))
124
-
125
- ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
126
- 240 alert_text = value['alert'].get('text')
127
- 241 raise exception_class(message, screen, stacktrace, alert_text)
128
- --> 242 raise exception_class(message, screen, stacktrace)
129
- 243
130
- 244 def _value_or_default(self, obj, key, default):
131
-
132
- NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"span.revEntryAnsNum"}
133
- (Session info: headless chrome=70.0.3538.110)
134
- (Driver info: chromedriver=2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90),platform=Windows NT 10.0.17134 x86_64)