現在Djangoでフォームを作成しているのですが、入力した値をそのまま表示する処理は動作するのですが、入力した値に何か処理を加えて(今回の例ではスクレイピング)、その結果得られた値を表示する機能が作成できないで困っています。
例えば、フォームにyahoo.comと入力した場合、そのURLでの本文を取得し表示。
下記はローカルでhttp://localhost:8000/index/にアクセスした際に起こるエラーです。
・urlがNoneの場合の処理をviews.pyに追加
Python
1#Views.py 2from django.http.response import HttpResponse 3import requests 4from bs4 import BeautifulSoup 5 6def index(request): 7 8 url = request.GET.get('url') 9 10 if url == None: 11 d = { 12 'category' : "urlを入力して下さい。" 13 } 14 else: 15 # 入力されたURLでの本文を取得する。 16 r = requests.get(url) 17 soup = BeautifulSoup(r.text, 'lxml') 18 doc = soup.find_all('p') 19 20 #取得した本文を形態素解析し、名詞のみ抽出 21 word_list='' 22 for text in doc: 23 m = MeCab.Tagger() 24 m_text = m.parse(text.text) 25 for row in m_text.split("\n"): 26 word =row.split("\t")[0]#タブ区切りになっている1つ目を取り出す。ここには形態素が格納されている 27 if word == "EOS": 28 break 29 else: 30 pos = row.split("\t")[1]#タブ区切りになっている2つ目を取り出す。ここには品詞が格納されている 31 slice = pos[:2] 32 if slice == "名詞": 33 word_list = word_list +" "+ word 34 35 d = { 36 'category': word_list 37 } 38 39 return render(request, 'classifier/index.html',d) 40
Python
1#index.html 2{% extends "classifier/base.html" %} 3 4{% block section %} 5<form action = "" method="get"> 6 <label>URL:<input type="url" size = "30" name ="url"> 7 <input type="submit" value="送信"> 8 </label> 9</form> 10 11{% if category %} 12<p>{{category}}</p><br> 13{% endif %} 14{% endblock %}
かれこれ3時間ほど悩んでいるのですが、解決できません。。よろしくお願いします。
また、エラーの解決に必要なファイルがあれば追加するので、お申し付けください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/07/15 08:02
退会済みユーザー
2019/07/15 08:04
2019/07/15 08:31 編集
退会済みユーザー
2019/07/15 08:37