iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務系列 第 18

[Day 18] 第一主餐 pt.10-中文資料存料至文中,django如何存取中文

  • 分享至 

  • xImage
  •  

前一篇我們把資料庫修改完成了
今天我們就要來把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內了
下一步我們就要來把所有歷屆財報自動撈取啦
想知道這麼多財報撈起來要多久
咱們下回分解~


上一篇
[Day 17] 第一主餐 pt.9-戰前準備
下一篇
[Day 19] 第一主餐 pt.11-財報資料,我全都要
系列文
BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言