回答編集履歴

3

追記

2018/08/28 08:42

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -158,12 +158,38 @@
158
158
 
159
159
 
160
160
 
161
+ ---
162
+
163
+
164
+
161
- 1,requests.getの戻り値のレスポンスオブジェクトに対して、
165
+ 1,requests.getの戻り値のレスポンスオブジェクトに対して以下のどちらかの処理をいれると
166
+
162
-
167
+ 質問文のエラーより前に問題が発見できるかと。
168
+
169
+
170
+
163
- 1-a,`statuscode`をみる or raise_for_status()
171
+ 1-a,`try~except`で囲んで、`raise_for_status()`を呼び出す。 (回答者:推奨コード)
164
172
 
165
173
  ```Python
166
174
 
175
+ try:
176
+
177
+ res = requests.get(url, params)
178
+
179
+ res.raise_for_status()
180
+
181
+ except Exception as ex:
182
+
183
+ LOGGER.exception(ex)
184
+
185
+ ```
186
+
187
+
188
+
189
+ 1-b,HTTPステータスコード:`statuscode`をみる。
190
+
191
+ ```Python
192
+
167
193
  res = requests.get(url, params)
168
194
 
169
195
  print(res.status_code)
@@ -172,18 +198,6 @@
172
198
 
173
199
 
174
200
 
175
- 1-b,raise_for_status()を呼び出す。
176
-
177
- ```Python
178
-
179
- res = requests.get(url, params)
180
-
181
- res.raise_for_status()
182
-
183
- ```
184
-
185
-
186
-
187
201
  2,リトライ処理を行う。
188
202
 
189
203
  `requests`を使っているならば、`from urllib3.util.retry import Retry`

2

追記

2018/08/28 08:42

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- ````Python
27
+ ```Python
28
28
 
29
29
  from logging import getLogger, StreamHandler, Formatter, DEBUG
30
30
 
@@ -125,3 +125,69 @@
125
125
 
126
126
 
127
127
  大手の検索エンジンは画像検索に関しては制限がきついです。
128
+
129
+
130
+
131
+ ---
132
+
133
+
134
+
135
+ 回答の要旨を上手く伝えきれていないので、補足説明。
136
+
137
+ 質問文のコードは**numを考慮していなく1クエリ100件を上手く処理できないコード**です。
138
+
139
+ > "num" : 10 #1回の検索における取得件数(デフォルトで10件)
140
+
141
+
142
+
143
+ [wandbox](https://wandbox.org/permlink/Z1kM73tqhyzmvCIL)
144
+
145
+ 私の回答文のコードを参考に10クエリ*10件の総数:100に変更してみてくださいな。
146
+
147
+
148
+
149
+ ---
150
+
151
+
152
+
153
+ スクレイピングは相手サイトの都合にかなり影響されます。
154
+
155
+ 例外の発生が許容されないのならばtry~exceptを行うようなコードにしてください。
156
+
157
+ python 再試行、python リトライで検索するといろいろHITするかと。
158
+
159
+
160
+
161
+ 1,requests.getの戻り値のレスポンスオブジェクトに対して、
162
+
163
+ 1-a,`statuscode`をみる or raise_for_status()
164
+
165
+ ```Python
166
+
167
+ res = requests.get(url, params)
168
+
169
+ print(res.status_code)
170
+
171
+ ```
172
+
173
+
174
+
175
+ 1-b,raise_for_status()を呼び出す。
176
+
177
+ ```Python
178
+
179
+ res = requests.get(url, params)
180
+
181
+ res.raise_for_status()
182
+
183
+ ```
184
+
185
+
186
+
187
+ 2,リトライ処理を行う。
188
+
189
+ `requests`を使っているならば、`from urllib3.util.retry import Retry`
190
+
191
+ 参考:[KeyError の再試行について](https://teratail.com/questions/118609)
192
+
193
+ 3,あと相手サーバーの負荷軽減のために適度なsleepを入れてくださいな。

1

追記

2018/08/28 08:36

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -62,6 +62,8 @@
62
62
 
63
63
  API_PATH = "https://www.googleapis.com/customsearch/v1"
64
64
 
65
+ start_index = 1
66
+
65
67
  PARAMS = {
66
68
 
67
69
  "cx" : "xxxx:xxxx", #検索エンジンID
@@ -72,13 +74,11 @@
72
74
 
73
75
  "searchType": "image", #検索タイプ
74
76
 
75
- "start" : 1, #開始インデックス
77
+ "start" : start_index, #開始インデックス
76
78
 
77
79
  "num" : 10 #1回の検索における取得件数(デフォルトで10件)
78
80
 
79
81
  }
80
-
81
- start_index = 1
82
82
 
83
83
  for _ in range(10): # 10 * 10 = 100
84
84