回答編集履歴

3

追記・修正

2020/03/26 10:22

投稿

CHERRY
CHERRY

スコア25175

test CHANGED
@@ -75,3 +75,113 @@
75
75
  print("ValueError!")
76
76
 
77
77
  ```
78
+
79
+
80
+
81
+ ----
82
+
83
+
84
+
85
+ また、今回の質問のプログラムでは、下記のようにインデントを修正して、1つ目の for ループ内に後半部分を入れるだけでも同じ機能になると思われます。(目指していたのはこちらでしょうか?)
86
+
87
+
88
+
89
+ ```
90
+
91
+ #●画像ファイルをダウンロードするための準備
92
+
93
+ # ①-①.ライブラリをインポート
94
+
95
+ import time
96
+
97
+ import re
98
+
99
+ import requests
100
+
101
+ from pathlib import Path
102
+
103
+ from bs4 import BeautifulSoup
104
+
105
+ # ①-②.出力フォルダを作成
106
+
107
+ output_folder = Path('C:\python\img')
108
+
109
+ output_folder.mkdir(exist_ok=True)
110
+
111
+ # ①-③.スクレイピングしたいURLを設定
112
+
113
+ url = 'https://www.hotpepper.jp/strJ001218137/food/'
114
+
115
+
116
+
117
+ # ①-④.画像ページのURLを格納するリストを用意
118
+
119
+ linklist = []
120
+
121
+
122
+
123
+ #●検索結果ページから画像のリンクを取り出す
124
+
125
+ # ②-①.検索結果ページのhtmlを取得
126
+
127
+ html = requests.get(url).text
128
+
129
+ # ②-②.検索結果ページのオブジェクトを作成
130
+
131
+ soup = BeautifulSoup(html, 'lxml')
132
+
133
+ # ②-③.画像リンクのタグをすべて取得
134
+
135
+ a_list =soup.select('div.columnPlex > p > a')
136
+
137
+ # ②-④.画像リンクを1つずつ取り出す
138
+
139
+ for a in a_list:
140
+
141
+ # ②-⑤.画像ページのURLを抽出
142
+
143
+ link_url = a.attrs['href']
144
+
145
+ # ②-⑥.画像ページのURLをリストに追加
146
+
147
+ linklist.append(link_url)
148
+
149
+ time.sleep(1.0)
150
+
151
+
152
+
153
+ # ③-⑦.画像ファイルの名前を抽出
154
+
155
+ filename = re.search(".*/(.*png|.*jpg)$",link_url)
156
+
157
+ # ③-⑧.保存先のファイルパスを生成
158
+
159
+ save_path = output_folder.joinpath(filename.group(1))
160
+
161
+ time.sleep(1.0)
162
+
163
+ # ●画像ファイルのURLからデータをダウンロード
164
+
165
+ try:
166
+
167
+ # ④-①.画像ファイルのURLからデータを取得
168
+
169
+ image = requests.get(link_url)
170
+
171
+ # ④-②.保存先のファイルパスにデータを保存
172
+
173
+ open(save_path, 'wb').write(image.content)
174
+
175
+ # ④-③.保存したファイル名を表示
176
+
177
+ print(save_path)
178
+
179
+ time.sleep(1.0)
180
+
181
+ except ValueError:
182
+
183
+ # ④-④.失敗した場合はエラー表示
184
+
185
+ print("ValueError!")
186
+
187
+ ```

2

追記・修正

2020/03/26 10:22

投稿

CHERRY
CHERRY

スコア25175

test CHANGED
@@ -19,3 +19,59 @@
19
19
 
20
20
 
21
21
  Python は、インデントが重要ですが、インデントについて理解はされていますか?
22
+
23
+
24
+
25
+ ----
26
+
27
+
28
+
29
+ 参考にされたサイトのようにするのであれば、前半で抽出して、リストに追加した linklist を利用してループする ` for page_url in linklist: ` を追加して、「# ③-⑦.画像ファイルの名前を抽出」から後ろの部分をインデントして、追加した for ループの中に入れてください。
30
+
31
+
32
+
33
+ また、`try:` や `except ValueError:` で実行する部分にもインデントが必要です。
34
+
35
+
36
+
37
+ 例(後半部分のみ記載)
38
+
39
+ ```Python
40
+
41
+ for page_url in linklist:
42
+
43
+ # ③-⑦.画像ファイルの名前を抽出
44
+
45
+ filename = re.search(".*/(.*png|.*jpg)$",link_url)
46
+
47
+ # ③-⑧.保存先のファイルパスを生成
48
+
49
+ save_path = output_folder.joinpath(filename.group(1))
50
+
51
+ time.sleep(1.0)
52
+
53
+ # ●画像ファイルのURLからデータをダウンロード
54
+
55
+ try:
56
+
57
+ # ④-①.画像ファイルのURLからデータを取得
58
+
59
+ image = requests.get(link_url)
60
+
61
+ # ④-②.保存先のファイルパスにデータを保存
62
+
63
+ open(save_path, 'wb').write(image.content)
64
+
65
+ # ④-③.保存したファイル名を表示
66
+
67
+ print(save_path)
68
+
69
+ time.sleep(1.0)
70
+
71
+ except ValueError:
72
+
73
+ # ④-④.失敗した場合はエラー表示
74
+
75
+ print("ValueError!")
76
+
77
+ ```

1

追記

2020/03/26 10:17

投稿

CHERRY
CHERRY

スコア25175

test CHANGED
@@ -14,8 +14,8 @@
14
14
 
15
15
 
16
16
 
17
- もしかして、ループの中で実行しているつもりで書かれたコードでしょうか?
17
+ もしかして、画像を取得する部分もループの中で実行しているつもりで書かれたコードでしょうか?
18
18
 
19
19
 
20
20
 
21
- Python は、インデントが重要ですが、インデント理解されていない感じでしょうか?
21
+ Python は、インデントが重要ですが、インデントについて理解されていますか?