質問編集履歴

3

実現したいことの修正

2021/01/30 08:44

投稿

hisa_eng
hisa_eng

スコア3

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- python3の初学者です。python3を用いて簡易的なスクレイピングのアプリを作成しています。現在は、ブラウザ上でビューファイルは問題なく表示され、urlを用いたスクレイピングも行えています。しかし、例外のurlで抽出すると、(IndexError: list index out of range)が発生するため、例外時にエラーメッセージを表示させたいのですが、表示されなくて困っております。
5
+ python3の初学者です。python3を用いて簡易的なスクレイピングのアプリを作成しています。現在は、ブラウザ上でビューファイルは問題なく表示され、urlを用いたスクレイピングも行えています。しかし、例外のurlで抽出すると、(IndexError: list index out of range)が発生するため、例外時に画面上にフォームエラーメッセージを表示させたいのですが、表示されなくて困っております。
6
6
 
7
7
 
8
8
 

2

ディレクトリとファイル構成のGyazoを添付しました

2021/01/30 08:44

投稿

hisa_eng
hisa_eng

スコア3

test CHANGED
File without changes
test CHANGED
@@ -263,3 +263,9 @@
263
263
  requests 2.25.1
264
264
 
265
265
  beautifulsoup4 4.9.3
266
+
267
+
268
+
269
+ ディレクトリとファイルの構成
270
+
271
+ https://gyazo.com/434a1275b9db6c0e147dd6c18fd1b1c1

1

view.pyのコードを追記しました

2021/01/30 08:18

投稿

hisa_eng
hisa_eng

スコア3

test CHANGED
File without changes
test CHANGED
@@ -172,6 +172,70 @@
172
172
 
173
173
  ```
174
174
 
175
+ view.pyのコード
176
+
177
+ ```python
178
+
179
+ from django.shortcuts import render
180
+
181
+ from .models import News
182
+
183
+ from django.views.generic import CreateView
184
+
185
+ from django.urls import reverse_lazy
186
+
187
+ import urllib.request
188
+
189
+ import requests
190
+
191
+ from bs4 import BeautifulSoup
192
+
193
+
194
+
195
+
196
+
197
+ class Create(CreateView):
198
+
199
+ template_name = 'home.html'
200
+
201
+ model = News
202
+
203
+ fields = ('url',)
204
+
205
+ success_url = reverse_lazy('list')
206
+
207
+
208
+
209
+
210
+
211
+ def listfunc(request):
212
+
213
+ for post in News.objects.all():
214
+
215
+ url = post.url
216
+
217
+ list = []
218
+
219
+ response = requests.get(url)
220
+
221
+ bs = BeautifulSoup(response.text, "html.parser")
222
+
223
+ ul_tag = bs.find_all(class_="yjnSubTopics_list")
224
+
225
+ for tag in ul_tag[0]:
226
+
227
+ title = tag.a.getText()
228
+
229
+ url2 = tag.a.get("href")
230
+
231
+ list.append([title, url2])
232
+
233
+ context = {'list': list,}
234
+
235
+ return render(request, 'list.html', context)
236
+
237
+ ```
238
+
175
239
 
176
240
 
177
241
  ### 試したこと