0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Tkinter構(gòu)建股票數(shù)據(jù)抓取以及展示K線圖功能

我快閉嘴 ? 來(lái)源:蘿卜大雜燴 ? 作者:周蘿卜 ? 2022-09-07 11:00 ? 次閱讀

在前面的文章中,我們學(xué)習(xí)了如何使用 Tkinter 構(gòu)建股票數(shù)據(jù)抓取以及展示K線圖功能,雖然大致的功能已經(jīng)具備,但是在當(dāng)今這個(gè)人手一個(gè) Web 服務(wù)的年代,GUI 程序還是沒(méi)有 Web 服務(wù)來(lái)的香啊。我們需要用到的知識(shí)包括 PyEcharts 的使用,tushare 庫(kù)獲取股票數(shù)據(jù)的方法以及 Flask 的基本用法。

01獲取股票數(shù)據(jù)

我們先來(lái)看下 tushare 的使用,這個(gè)應(yīng)該是當(dāng)前最為流行的股票數(shù)據(jù)庫(kù)了吧,一行代碼,就能輕松獲取某支股票的歷史數(shù)據(jù)

importtushareasts
df=ts.get_hist_data('000001')
print(df)

8161c7ce-2dd3-11ed-ba43-dac502259ad0.png

現(xiàn)在股票的歷史數(shù)據(jù)有了,我們還需要一份股票名稱和股票代碼的對(duì)應(yīng)表,同樣通過(guò) tushare 來(lái)獲取

stock_list=ts.get_stock_basics()
stock_list.reset_index(inplace=True)
stock_list[['code','name']].to_csv('stock_code_name.csv')

這樣就成功保存了一份股票名稱和股票代碼的對(duì)應(yīng)數(shù)據(jù)

8172bbf6-2dd3-11ed-ba43-dac502259ad0.png

02PyEcharts作圖

下面再來(lái)看看如何通過(guò) PyEcharts 來(lái)制作 K 線圖,其實(shí)官網(wǎng)上的例子已經(jīng)非常具體了,我們只需要把拿到的歷史股票數(shù)據(jù)做些簡(jiǎn)單處理即可,我這里直接給我的數(shù)據(jù)處理過(guò)程

mydate=df[:30].index.tolist()
mydata=df[:30][['open','close','low','high']].values.tolist()


defkline_base(mydate,data)->Kline:
c=(
Kline()
.add_xaxis(mydate)
.add_yaxis("kline",data)
.set_global_opts(
yaxis_opts=opts.AxisOpts(is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True,areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
xaxis_opts=opts.AxisOpts(is_scale=True,
axislabel_opts=opts.LabelOpts(rotate=-30)),
title_opts=opts.TitleOpts(title="Kline-基本示例"),
datazoom_opts=[opts.DataZoomOpts()],
)
)
returnc

kline_base(mydate,mydata).render_notebook()

這樣就可以得到一個(gè)不錯(cuò)的 K 線圖了

81921096-2dd3-11ed-ba43-dac502259ad0.png

下面我們就可以著手完成 Flask 的代碼啦

03構(gòu)建 Web框架

首先我們先來(lái)完成 Web 框架的整體編寫(xiě),為了頁(yè)面的美觀與編碼的方便,直接使用 bootstrap 來(lái)構(gòu)建前端頁(yè)面

視圖函數(shù)編寫(xiě)

首先完成初始化工作,在項(xiàng)目目錄下創(chuàng)建一個(gè) app.py 文件

fromflaskimportFlask,render_template,request
frompyechartsimportoptionsasopts
frompyecharts.chartsimportKline
importtushareasts
importpandasaspd
fromflask_bootstrapimportBootstrap

app=Flask(__name__)
bootstrap=Bootstrap(app)

導(dǎo)入需要用到的庫(kù),并完成 flask app 的初始化工作。

接下來(lái)再寫(xiě)一個(gè) 404 的視圖函數(shù),統(tǒng)一處理所有的 Not Found 頁(yè)面

@app.errorhandler(404)
defpage_not_found(e):
returnrender_template("404.html"),404

接著我們綁定根地址到 index 視圖函數(shù)上,返回到 index.html 模板文件上

@app.route("/")
defindex():
returnrender_template("index.html")

模板編寫(xiě)

在同級(jí)目錄創(chuàng)建一個(gè) templates 文件夾,創(chuàng)建三個(gè) HTML 文件,分別為 404.html,base.html 和 index.html

base.html 是所有其他頁(yè)面 HTML 模板的母模板

{%extends"bootstrap/base.html"%}

{%blocktitle%}我的股票走勢(shì)網(wǎng)站{%endblock%}


{%blocknavbar%}
<divclass="navbarnavbar-inverse"role="navigation">
<divclass="container">
<divclass="navbar-header">
<buttontype="button"class="navbar-toggle"data-toggle="collapse"data-target=".navbar-collapse">
<spanclass="sr-only">Togglenavigationspan>
<spanclass="icon-bar">span>
<spanclass="icon-bar">span>
<spanclass="icon-bar">span>
button>
<aclass="navbar-brand"href="/">Stock-Dataa>
div>
<divclass="navbar-collapsecollapse">
<ulclass="navnavbar-nav">
<li><ahref="/">Homea>li>
ul>
div>
div>
div>
{%endblock%}

{%blockcontent%}
<divclass="container">
{%blockpage_content%}
{%endblock%}
div>
{%endblock%}

創(chuàng)建一個(gè)導(dǎo)航欄,并定義相關(guān)的 block 內(nèi)容

接下來(lái)編寫(xiě) 404.html 文件,展示非法 url 請(qǐng)求地址時(shí)的頁(yè)面

{%extends"base.html"%}

{%blocktitle%}PageNotFound{%endblock%}

{%blockpage_content%}
class="page-header">

NotFound

{%endblock%}

對(duì)于 index.html 文件,就是我們需要展示 K 線圖的頁(yè)面,我們后面再處理。

04編輯主邏輯

首先編寫(xiě)一個(gè)檢查股票正確性的函數(shù)

defcheck_stock(code):
n=0
l=[]
stock_code=pd.read_csv("stock_code_name.csv",dtype=object)
stock_code.drop('Unnamed:0',axis=1,inplace=True)
stock_list=stock_code.values.tolist()
foriinstock_list:
ifcodeini:
n+=1
l=i
else:
continue
returnn,l

如果股票正確,則返回 n=1,否則返回 n=0

接下來(lái)再編寫(xiě)獲取股票數(shù)據(jù)的函數(shù)

defget_stock_data(code,ctime):
df=ts.get_hist_data(code)
mydate=df[:ctime].index.tolist()
mydata=df[:ctime][['open','close','low','high']].values.tolist()
return[mydate,mydata]

下面就是把 PyEcharts 集成到 Flask 應(yīng)用了,可以按照官方的教程走,把 PyEcharts 的樣式文件等拷貝到自己的 templates 目錄下,再編寫(xiě)一個(gè)用于調(diào)用 kline_base() 函數(shù)的視圖函數(shù)

@app.route("/Kline",methods=['GET','POST'])
defget_kline_chart():
stock_name=request.form.get('stockName')
query_time=request.form.get('queryTime')
ifnotstock_name:
stock_name='平安銀行'
ifnotquery_time:
query_time=30
status,stock_code=check_stock(stock_name)
ifstatus==0:
return'errorstockcodeorname'
mydate,mydata=get_stock_data(stock_code[0],int(query_time))
c=kline_base(mydate,mydata,stock_code[1])
returnc.dump_options()

首先通過(guò) request 變量獲取到前端傳遞過(guò)來(lái)的數(shù)據(jù),分別為 stockName 和 queryTime,如果這兩個(gè)參數(shù)是空值時(shí),則賦予它們一個(gè)默認(rèn)值。

接著判斷股票代碼的正確性并獲取股票歷史數(shù)據(jù)。

最后調(diào)用 kline_base 函數(shù)畫(huà)出 K 線圖,并渲染到前端頁(yè)面上。

05前端頁(yè)面編寫(xiě)

最后我們來(lái)完成前端頁(yè)面的工作

首先定義一個(gè)表單,用于傳遞股票名稱,查詢時(shí)間

<formid="form1"onsubmit="returnfalse"action="#"method="post">
<pid="p1">股票名稱:
<inputname="stockName"type="text"id="stockName"tabindex="1"size="16"value=""placeholder="股票名稱"/>
p>
<pid="p2">查詢時(shí)間:
<inputname="queryTime"type="text"id="queryTime"tabindex="2"size="16"value=""placeholder="輸入30查詢近30天數(shù)據(jù)"/>
p>
<p><inputtype="submit"value="查詢"onclick="getData()">p>
form>

然后就是通過(guò) JQuery 來(lái)動(dòng)態(tài)獲取數(shù)據(jù)

functiongetData(){
varchart=echarts.init(document.getElementById('kline'),'white',{renderer:'canvas'});
$.ajax({
type:"POST",
dataType:"json",
url:"/Kline",
data:$('#form1').serialize(),
success:function(result){
chart.setOption(result);
},
error:function(){
alert("錯(cuò)誤的股票代碼!");
}
});
}

最后我們看下整體的效果

81da1e9a-2dd3-11ed-ba43-dac502259ad0.gif

是不是效果還不錯(cuò)呢,后面還可以繼續(xù)添加功能來(lái)完善我們的小小網(wǎng)站!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88316
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1253

    瀏覽量

    69059
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84081

原文標(biāo)題:用Python輕松制作一個(gè)股票K線圖網(wǎng)站

文章出處:【微信號(hào):AI科技大本營(yíng),微信公眾號(hào):AI科技大本營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python爬取雪球股票數(shù)據(jù)_第1節(jié) #硬聲創(chuàng)作季

    數(shù)據(jù)程序python
    充八萬(wàn)
    發(fā)布于 :2023年08月04日 23:31:05

    Python爬取雪球股票數(shù)據(jù)_第2節(jié) #硬聲創(chuàng)作季

    數(shù)據(jù)程序python
    充八萬(wàn)
    發(fā)布于 :2023年08月04日 23:31:56

    Python爬取雪球股票數(shù)據(jù)_第5節(jié) #硬聲創(chuàng)作季

    數(shù)據(jù)程序python
    充八萬(wàn)
    發(fā)布于 :2023年08月04日 23:34:27

    Python爬取雪球股票數(shù)據(jù)_第6節(jié) #硬聲創(chuàng)作季

    數(shù)據(jù)程序python
    充八萬(wàn)
    發(fā)布于 :2023年08月04日 23:35:18

    基于網(wǎng)絡(luò)共識(shí)的股票價(jià)格行為數(shù)據(jù)挖掘(英文

    的復(fù)雜性,急需從不同角度將各方面知識(shí)綜合利用。本文提出了股票價(jià)格充分融合網(wǎng)絡(luò)共識(shí)的策略,構(gòu)建了基于網(wǎng)絡(luò)共識(shí)的股票價(jià)格行為數(shù)據(jù)挖掘平臺(tái)。從交易系統(tǒng)實(shí)時(shí)采集
    發(fā)表于 04-24 09:56

    股票行情實(shí)時(shí)數(shù)據(jù)網(wǎng)絡(luò)采集LabVIEW程序

    本帖最后由 fantek 于 2013-12-26 12:56 編輯 根據(jù)網(wǎng)上資料設(shè)計(jì)了一個(gè)股票行情實(shí)時(shí)數(shù)據(jù)采集小程序。程序主要實(shí)現(xiàn)了行情數(shù)據(jù)網(wǎng)絡(luò)采集接口、K
    發(fā)表于 12-26 12:49

    炒股福利:樹(shù)莓派股票查詢庫(kù)(Python)

    的速度快很多。第五步:編寫(xiě)Python腳本我們將創(chuàng)建一個(gè)新目錄和一個(gè)Python來(lái)獲取股票數(shù)據(jù)。輸入:mkdir stockquotecd stockquotenano stockquote.py然后
    發(fā)表于 01-06 14:20

    深圳天瑞地安解析股票軟件的功能需求

    開(kāi)發(fā)公司天瑞地安就來(lái)簡(jiǎn)要解析股票APP功能需求。  開(kāi)發(fā)一個(gè)股票APP有哪些功能?一、手機(jī)客戶端: 1.股票行情列表:顯示各種
    發(fā)表于 02-13 19:16

    labview獲取并分析股票數(shù)據(jù)

    ``
    發(fā)表于 03-08 09:50

    股票數(shù)據(jù)如何分析

    股票數(shù)據(jù)分析
    發(fā)表于 05-29 10:49

    視覺(jué)與運(yùn)動(dòng)_讀取CDR

    視覺(jué)與運(yùn)動(dòng)_讀取CDR(股票現(xiàn)價(jià)與市凈率) 無(wú)聊做了個(gè) 讀取CDR vi來(lái)幫我完成股票數(shù)據(jù)收集!
    發(fā)表于 07-22 23:21

    數(shù)據(jù)抓取問(wèn)題

    新人想做一個(gè)裝置,用于抓取水質(zhì)監(jiān)測(cè)數(shù)據(jù),假設(shè)現(xiàn)在水質(zhì)監(jiān)測(cè)系統(tǒng)已經(jīng)建成,但是想通過(guò)數(shù)據(jù)抓取裝置獲取水質(zhì)數(shù)據(jù),類似圖片的形式,請(qǐng)問(wèn)大佬們可以怎么
    發(fā)表于 11-02 11:18

    基于強(qiáng)化學(xué)習(xí)的股票預(yù)測(cè)系統(tǒng)的研究與設(shè)計(jì)

    股票市場(chǎng)是金融分析領(lǐng)域中重要而困難的問(wèn)題。股票數(shù)據(jù)的分析和預(yù)測(cè)具有重大的理論意義和誘人的應(yīng)用價(jià)值。BP 神經(jīng)網(wǎng)絡(luò)在目前的股票預(yù)測(cè)系統(tǒng)中應(yīng)用廣泛,但是作為有導(dǎo)師的學(xué)
    發(fā)表于 09-01 09:16 ?6次下載

    全球最大資產(chǎn)管理公司貝萊德集團(tuán)增持蘋(píng)果股票

    全球最大的資產(chǎn)管理機(jī)構(gòu)——貝萊德集團(tuán)(BlackRock)已經(jīng)將其在蘋(píng)果公司所持的股票數(shù)量增加到3.22億股。
    發(fā)表于 01-26 20:49 ?482次閱讀

    使用TTGO ESP32和Visuino從互聯(lián)網(wǎng)獲取股票數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《使用TTGO ESP32和Visuino從互聯(lián)網(wǎng)獲取股票數(shù)據(jù).zip》資料免費(fèi)下載
    發(fā)表于 11-04 09:29 ?0次下載
    使用TTGO ESP32和Visuino從互聯(lián)網(wǎng)獲取<b class='flag-5'>股票數(shù)據(jù)</b>