前一篇我们把资料库修改完成了
今天我们就要来把BeautifulSoup的中文资料送过去了
由於昨天遭遇了一些困难,今天终於排除成功啦
废话不多说,咱们累狗~
好的,上一篇处理完之後,这一篇接下来就是把url跟views做修改啦
毕竟views的API改了,url当然也要跟着改
所以我们先把views.py的档案改成如下
from django.shortcuts import render
from django.http import JsonResponse #刚刚的JsonResponse套件
from stonks_index.models import stonks_DB #从models.py import DBTest 物件
from django.views.decorators.csrf import csrf_exempt
import json
# Create your views here.
@csrf_exempt
def set_stonks_data(request):
#取得post data
data = request.POST
#检查所有栏位是否都有值,若有栏位没有值,回传400
if 'comp_id' not in data:
return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
if 'year' not in data:
return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
if 'season' not in data:
return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)
if 'balance_sheet' not in data:
return JsonResponse({"status": False, "message": "balance_sheet column cannot be empty"}, status=400)
if 'income_statement' not in data:
return JsonResponse({"status": False, "message": "income_statement column cannot be empty"}, status=400)
#建立新的DBTest object
new_obj = stonks_DB()
#一个萝卜一个坑
new_obj.comp_id = data.get('comp_id', None)
new_obj.year = data.get('year', None)
new_obj.season = data.get('season', None)
new_obj.balance_sheet = data.get('balance_sheet', None)
new_obj.income_statement = data.get('income_statement', None)
#储存object
new_obj.save()
#回传200,这里使用JsonResponse
return JsonResponse(data={'msg':'add object success.'}, status=200)
@csrf_exempt
def get_stonks_data(request):
data = request.POST
#检查每栏位是否有值,若有一栏位没有值,回传400
if 'comp_id' not in data:
return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
if 'year' not in data:
return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
if 'season' not in data:
return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)
#将每个request之栏位捞出
post_comp_id = data.get('comp_id', None)
post_year = data.get('year', None)
post_season = data.get('season', None)
#搜寻符合条件之object
filter_obj = stonks_DB.objects.filter(comp_id = post_comp_id, year = post_year, season = post_season)
#如无符合条件之data,回传400
if filter_obj.count() == 0:
return JsonResponse({"status": False, "message": "cannot find package"}, status=400)
#取出第一笔资料
filter_obj = filter_obj.first()
#将捞出之data变成dict, 记得内容要转成json
return_dict = {'balance_sheet':json.loads(filter_obj.balance_sheet), 'income_statement':json.loads(filter_obj.income_statement)}
#回传200,这里使用JsonResponse, 把dict之资料变成JSON
return JsonResponse(data=return_dict, status=200)
通常在设计API时,我们会用get关键字代表资料捞出,set代表资料存入
因此这里我们用get跟set代表财报资料的存入捞出
然後url.py记得也要顺便改
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'set_stonks_data/$', views.set_stonks_data),
url(r'get_stonks_data/$', views.get_stonks_data),
]
处理完之後试跑一下runserver看有没有问题
改完了server端,接下来就要改好久不见的beautifulsoup端了
还记得我们当时使用了request捞取财报资料吗
现在我们要来用request把资料送到服务器里面了
首先我们将之前档案最後这一段改成如下
url = "http://172.16.15.123:8000/stonks/set_stonks_data/"
data={'comp_id':1201,
'year':109,
'season':1,
'balance_sheet':json.dumps(balance_sheet),
'income_statement':json.dumps(income_statement)}
res_post = requests.post(url=url,data=data,headers=headers)
print(res_post)
改完之後执行bs4的py档
回传200,成功
接下来我们去看看资料库
成功收到资料
接下来就是把资料回传回来啦
这边我们就可以使用postman了
我们把postman的url改成http://172.16.15.123:8000/stonks/get_stonks_data/
然後栏位改成如下
最後按一下送出
成功捞出资料啦~
以上我们成功的把财报资料捞出来并且储存在Database内了
下一步我们就要来把所有历届财报自动捞取啦
想知道这麽多财报捞起来要多久
咱们下回分解~
12 - rescue exception 异常处理在开发过程中时常可见,举例来说 Rails 中找...
昨天我们讲到了Vue的实体还有实体内会有的一些物件,今天就来用范例看看它内外互相响应的过程吧٩(ˊᗜ...
前言 第三天要延续介绍如何处理一笔数据。 对於数据分析的用途跟前几个步骤 请看上一篇文章 数据分析...
如果有人在看,可能会想说,蛤我都还没写履历就要看薪水了?? 就算你的考虑条件中没有薪水这一项,也可以...
Day 36 - 使用 Container 建立 Amazon SageMaker 端点 今天的任务...