質問編集履歴
6
質問をより具体的に
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
楽天市場からスクレイピングでデータを自動取得したいです。そのあとCSVに保存。
|
test
CHANGED
File without changes
|
5
エラーの内容の追加
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
なし
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
3
タイトルを変更
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
バージョン、実行環境の追記
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
全体的に質問内容を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
[Python]スクレイピングで自動的にデータを取得したい
|
test
CHANGED
@@ -1,14 +1,96 @@
|
|
1
|
-
スクレイピングで楽天から商品レビューと参考になった人数を自動で取得しようとしています。
|
1
|
+
スクレイピングで楽天市場から商品レビューと参考になった人数を自動で取得しようとしています。
|
2
2
|
|
3
|
-
|
3
|
+
以前はPhantomJSを使っていたのですが、seleniumでのサポートが終わったのでheadless Chromeで代用しようとしています。
|
4
4
|
|
5
|
-
|
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
|
-
|
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)
|