回答編集履歴
4
Pathlib.mkdirを使うように変更!
test
CHANGED
@@ -178,7 +178,7 @@
|
|
178
178
|
|
179
179
|
self.download_dir = Path('download')
|
180
180
|
|
181
|
-
|
181
|
+
self.download_dir.mkdir(exist_ok=True)
|
182
182
|
|
183
183
|
|
184
184
|
|
3
追記
test
CHANGED
@@ -150,7 +150,7 @@
|
|
150
150
|
|
151
151
|
# ※画面をブロックさせないためにスレッドを生成して、startを呼び出す。
|
152
152
|
|
153
|
-
t = Thread(target=hack,args=search_word)
|
153
|
+
t = Thread(target=hack, args=(search_word,))
|
154
154
|
|
155
155
|
t.start()
|
156
156
|
|
2
追記
test
CHANGED
@@ -98,6 +98,14 @@
|
|
98
98
|
|
99
99
|
# tk.Label(frame1, image = image1).pack()#.grid(row=0, column=0)
|
100
100
|
|
101
|
+
# ※検索キーワードのテキストボックスを作成
|
102
|
+
|
103
|
+
self.key_word = tk.StringVar(value='草')
|
104
|
+
|
105
|
+
self.txt_key_word = tk.Entry(self, textvariable=self.key_word)
|
106
|
+
|
107
|
+
self.txt_key_word.pack()
|
108
|
+
|
101
109
|
# 探すボタンを作成
|
102
110
|
|
103
111
|
serch = tk.Button(self, text='探す', padx=45, pady=7, command=self.search)
|
@@ -138,9 +146,11 @@
|
|
138
146
|
|
139
147
|
def search(self):
|
140
148
|
|
149
|
+
search_word = self.key_word.get()
|
150
|
+
|
141
151
|
# ※画面をブロックさせないためにスレッドを生成して、startを呼び出す。
|
142
152
|
|
143
|
-
t = Thread(target=hack)
|
153
|
+
t = Thread(target=hack,args=search_word)
|
144
154
|
|
145
155
|
t.start()
|
146
156
|
|
@@ -290,11 +300,11 @@
|
|
290
300
|
|
291
301
|
#ダウンロード用(HTML)関数
|
292
302
|
|
293
|
-
def hack(): #wordeで取得したURLから画像のURLを抜き出す(解析) 使用ライブラリ:bs4
|
303
|
+
def hack(search_word: str): #wordeで取得したURLから画像のURLを抜き出す(解析) 使用ライブラリ:bs4
|
294
304
|
|
295
305
|
url = 'https://search.yahoo.co.jp/image/search'
|
296
306
|
|
297
|
-
params = {'n': '60', 'p':
|
307
|
+
params = {'n': '60', 'p': search_word, 'search.x': '1'}
|
298
308
|
|
299
309
|
res = dl.get(url, params)
|
300
310
|
|
1
補足
test
CHANGED
@@ -1,11 +1,43 @@
|
|
1
|
+
> bs4で画像のURLを取得する方法が解らないです。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
これに関しては質問文のソースコードでurl_listでURLを取得できているので、ダウンロードの仕方と保存の仕方が分からないと判断しました。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
極論を言えば以下のコードでも可能かと。
|
10
|
+
|
11
|
+
```Python
|
12
|
+
|
13
|
+
import os
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
for s in url_list:
|
18
|
+
|
19
|
+
res = requests.get(s)
|
20
|
+
|
21
|
+
file_name = os.path.basename(s)
|
22
|
+
|
23
|
+
with open(file_name, 'wb') as f:
|
24
|
+
|
25
|
+
f.write(res.content)
|
26
|
+
|
27
|
+
```
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
---
|
32
|
+
|
33
|
+
|
34
|
+
|
1
35
|
> ※超初心者です。
|
2
36
|
|
3
37
|
|
4
38
|
|
5
39
|
うーん、少し悩みましたが、ソースコードを頑張って読み取ってくれることを期待して。
|
6
40
|
|
7
|
-
|
8
|
-
|
9
41
|
|クラス|役割|
|
10
42
|
|
11
43
|
|:--|:--:|
|
@@ -16,8 +48,6 @@
|
|
16
48
|
|
17
49
|
|
18
50
|
|
19
|
-
|
20
|
-
|
21
51
|
```Python
|
22
52
|
|
23
53
|
# -*- coding: utf-8 -*-
|
@@ -26,12 +56,12 @@
|
|
26
56
|
|
27
57
|
from io import BytesIO
|
28
58
|
|
59
|
+
import os
|
60
|
+
|
61
|
+
from pathlib import Path
|
62
|
+
|
29
63
|
from threading import Thread
|
30
64
|
|
31
|
-
import os
|
32
|
-
|
33
|
-
from pathlib import Path
|
34
|
-
|
35
65
|
from time import sleep
|
36
66
|
|
37
67
|
#おまじない
|
@@ -136,6 +166,10 @@
|
|
136
166
|
|
137
167
|
self.timeout = 10
|
138
168
|
|
169
|
+
self.download_dir = Path('download')
|
170
|
+
|
171
|
+
os.makedirs(str(self.download_dir), exist_ok=True)
|
172
|
+
|
139
173
|
|
140
174
|
|
141
175
|
def get(self, url: str, params: dict=None):
|
@@ -188,27 +222,31 @@
|
|
188
222
|
|
189
223
|
try:
|
190
224
|
|
225
|
+
|
226
|
+
|
227
|
+
# get_contentの戻り値はここで取得
|
228
|
+
|
229
|
+
buffer, content_type = future.result()
|
230
|
+
|
231
|
+
# 保存対象のファイルかどうか。
|
232
|
+
|
233
|
+
if not self.save_content_type(content_type):
|
234
|
+
|
235
|
+
continue
|
236
|
+
|
191
237
|
# 保存ファイル名はURLのパス部分をそのまま取得
|
192
238
|
|
193
239
|
# 重複が発生するので連番を付けたりして対応してくださいな。
|
194
240
|
|
195
|
-
|
241
|
+
file_name = self.download_dir / os.path.basename(url)
|
196
|
-
|
197
|
-
|
242
|
+
|
198
|
-
|
199
|
-
|
243
|
+
|
200
|
-
|
201
|
-
|
244
|
+
|
202
|
-
|
203
|
-
if not self.save_content_type(content_type):
|
204
|
-
|
205
|
-
continue
|
206
|
-
|
207
|
-
print(content_type,
|
245
|
+
print(content_type, file_name)
|
208
246
|
|
209
247
|
# 保存
|
210
248
|
|
211
|
-
self.save_file(buffer,
|
249
|
+
self.save_file(buffer, file_name)
|
212
250
|
|
213
251
|
count += 1
|
214
252
|
|
@@ -232,9 +270,9 @@
|
|
232
270
|
|
233
271
|
|
234
272
|
|
235
|
-
def save_file(self, buffer: BytesIO, file_name:
|
273
|
+
def save_file(self, buffer: BytesIO, file_name: Path) ->None:
|
236
|
-
|
274
|
+
|
237
|
-
with
|
275
|
+
with file_name.open('wb') as f:
|
238
276
|
|
239
277
|
f.write(buffer.getvalue())
|
240
278
|
|