回答編集履歴

4

Pathlib.mkdirを使うように変更!

2018/04/22 19:10

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
  self.download_dir = Path('download')
180
180
 
181
- os.makedirs(str(self.download_dir), exist_ok=True)
181
+ self.download_dir.mkdir(exist_ok=True)
182
182
 
183
183
 
184
184
 

3

追記

2018/04/22 19:10

投稿

umyu
umyu

スコア5846

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

追記

2018/04/22 13:40

投稿

umyu
umyu

スコア5846

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': "草", 'search.x': '1'}
307
+ params = {'n': '60', 'p': search_word, 'search.x': '1'}
298
308
 
299
309
  res = dl.get(url, params)
300
310
 

1

補足

2018/04/22 07:34

投稿

umyu
umyu

スコア5846

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
- basename = os.path.basename(url)
241
+ file_name = self.download_dir / os.path.basename(url)
196
-
197
- # get_contentの戻り値はここで取得
242
+
198
-
199
- buffer, content_type = future.result()
243
+
200
-
201
- # 保存対象のファイルかどうか。
244
+
202
-
203
- if not self.save_content_type(content_type):
204
-
205
- continue
206
-
207
- print(content_type, basename)
245
+ print(content_type, file_name)
208
246
 
209
247
  # 保存
210
248
 
211
- self.save_file(buffer, basename)
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: str) ->None:
273
+ def save_file(self, buffer: BytesIO, file_name: Path) ->None:
236
-
274
+
237
- with open(file_name, 'wb') as f:
275
+ with file_name.open('wb') as f:
238
276
 
239
277
  f.write(buffer.getvalue())
240
278