質問編集履歴

6

質問をより具体的に

2018/12/04 14:02

投稿

menuett
menuett

スコア15

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

5

エラーの内容の追加

2018/12/04 14:02

投稿

menuett
menuett

スコア15

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,97 @@
88
88
 
89
89
  NoSuchElementException Traceback (most recent call last)
90
90
 
91
-
91
+ **#追加部分↓**
92
+
93
+ <ipython-input-14-43bd36a04d9d> in <module>()
94
+
95
+ 25 #dfつくる
96
+
97
+ 26 for review in reviews:
98
+
99
+ ---> 27 score=review.find_element_by_css_selector("span.revEntryAnsNum").text
100
+
101
+ 28 text=review.find_element_by_css_selector("dd.revRvwUserEntryCmt.description").text
102
+
103
+ 29 se=pd.Series([score,text],columns)
104
+
105
+
106
+
107
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element_by_css_selector(self, css_selector)
108
+
109
+ 428 element = element.find_element_by_css_selector('#foo')
110
+
111
+ 429 """
112
+
113
+ --> 430 return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
114
+
115
+ 431
116
+
117
+ 432 def find_elements_by_css_selector(self, css_selector):
118
+
119
+
120
+
121
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in find_element(self, by, value)
122
+
123
+ 657
124
+
125
+ 658 return self._execute(Command.FIND_CHILD_ELEMENT,
126
+
127
+ --> 659 {"using": by, "value": value})['value']
128
+
129
+ 660
130
+
131
+ 661 def find_elements(self, by=By.ID, value=None):
132
+
133
+
134
+
135
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
136
+
137
+ 631 params = {}
138
+
139
+ 632 params['id'] = self._id
140
+
141
+ --> 633 return self._parent.execute(command, params)
142
+
143
+ 634
144
+
145
+ 635 def find_element(self, by=By.ID, value=None):
146
+
147
+
148
+
149
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
150
+
151
+ 319 response = self.command_executor.execute(driver_command, params)
152
+
153
+ 320 if response:
154
+
155
+ --> 321 self.error_handler.check_response(response)
156
+
157
+ 322 response['value'] = self._unwrap_value(
158
+
159
+ 323 response.get('value', None))
160
+
161
+
162
+
163
+ ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
164
+
165
+ 240 alert_text = value['alert'].get('text')
166
+
167
+ 241 raise exception_class(message, screen, stacktrace, alert_text)
168
+
169
+ --> 242 raise exception_class(message, screen, stacktrace)
170
+
171
+ 243
172
+
173
+ 244 def _value_or_default(self, obj, key, default):
174
+
175
+
176
+
177
+ NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"span.revEntryAnsNum"}
178
+
179
+ (Session info: headless chrome=70.0.3538.110)
180
+
181
+ (Driver info: chromedriver=2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90),platform=Windows NT 10.0.17134 x86_64)
92
182
 
93
183
 
94
184
 

4

なし

2018/12/04 12:21

投稿

menuett
menuett

スコア15

test CHANGED
File without changes
test CHANGED
File without changes

3

タイトルを変更

2018/12/04 11:30

投稿

menuett
menuett

スコア15

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

2

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

2018/12/03 14:37

投稿

menuett
menuett

スコア15

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,10 @@
21
21
  ※参考になった人数が空の場合は0とする。
22
22
 
23
23
  実行すると1ページ目はうまく取得できるのですが、2ページ目以降になると取得できません。
24
+
25
+ Pythonのバージョンは3.6.5です。
26
+
27
+ Windouws10,jupyter notebookで作成しました。
24
28
 
25
29
 
26
30
 

1

全体的に質問内容を修正

2018/12/03 14:29

投稿

menuett
menuett

スコア15

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