0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Tkinter构建股票数据抓取以及展示K线图功能

我快闭嘴 来源:萝卜大杂烩 作者:周萝卜 2022-09-07 11:00 次阅读

在前面的文章中,我们学习了如何使用 Tkinter 构建股票数据抓取以及展示K线图功能,虽然大致的功能已经具备,但是在当今这个人手一个 Web 服务的年代,GUI 程序还是没有 Web 服务来的香啊。我们需要用到的知识包括 PyEcharts 的使用,tushare 库获取股票数据的方法以及 Flask 的基本用法。

01获取股票数据

我们先来看下 tushare 的使用,这个应该是当前最为流行的股票数据库了吧,一行代码,就能轻松获取某支股票的历史数据

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

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

现在股票的历史数据有了,我们还需要一份股票名称和股票代码的对应表,同样通过 tushare 来获取

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

这样就成功保存了一份股票名称和股票代码的对应数据

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

02PyEcharts作图

下面再来看看如何通过 PyEcharts 来制作 K 线图,其实官网上的例子已经非常具体了,我们只需要把拿到的历史股票数据做些简单处理即可,我这里直接给我的数据处理过程

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()

这样就可以得到一个不错的 K 线图了

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

下面我们就可以着手完成 Flask 的代码啦

03构建 Web框架

首先我们先来完成 Web 框架的整体编写,为了页面的美观与编码的方便,直接使用 bootstrap 来构建前端页面

视图函数编写

首先完成初始化工作,在项目目录下创建一个 app.py 文件

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

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

导入需要用到的库,并完成 flask app 的初始化工作。

接下来再写一个 404 的视图函数,统一处理所有的 Not Found 页面

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

接着我们绑定根地址到 index 视图函数上,返回到 index.html 模板文件上

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

模板编写

在同级目录创建一个 templates 文件夹,创建三个 HTML 文件,分别为 404.html,base.html 和 index.html

base.html 是所有其他页面 HTML 模板的母模板

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

{%blocktitle%}我的股票走势网站{%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%}

创建一个导航栏,并定义相关的 block 内容

接下来编写 404.html 文件,展示非法 url 请求地址时的页面

{%extends"base.html"%}

{%blocktitle%}PageNotFound{%endblock%}

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

NotFound

{%endblock%}

对于 index.html 文件,就是我们需要展示 K 线图的页面,我们后面再处理。

04编辑主逻辑

首先编写一个检查股票正确性的函数

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

接下来再编写获取股票数据的函数

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 应用了,可以按照官方的教程走,把 PyEcharts 的样式文件等拷贝到自己的 templates 目录下,再编写一个用于调用 kline_base() 函数的视图函数

@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()

首先通过 request 变量获取到前端传递过来的数据,分别为 stockName 和 queryTime,如果这两个参数是空值时,则赋予它们一个默认值。

接着判断股票代码的正确性并获取股票历史数据。

最后调用 kline_base 函数画出 K 线图,并渲染到前端页面上。

05前端页面编写

最后我们来完成前端页面的工作

首先定义一个表单,用于传递股票名称,查询时间

<formid="form1"onsubmit="returnfalse"action="#"method="post">
<pid="p1">股票名称:
<inputname="stockName"type="text"id="stockName"tabindex="1"size="16"value=""placeholder="股票名称"/>
p>
<pid="p2">查询时间:
<inputname="queryTime"type="text"id="queryTime"tabindex="2"size="16"value=""placeholder="输入30查询近30天数据"/>
p>
<p><inputtype="submit"value="查询"onclick="getData()">p>
form>

然后就是通过 JQuery 来动态获取数据

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("错误的股票代码!");
}
});
}

最后我们看下整体的效果

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

是不是效果还不错呢,后面还可以继续添加功能来完善我们的小小网站!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • Web
    Web
    +关注

    关注

    2

    文章

    1238

    浏览量

    68463
  • python
    +关注

    关注

    51

    文章

    4676

    浏览量

    83467

原文标题:用Python轻松制作一个股票K线图网站

文章出处:【微信号:AI科技大本营,微信公众号:AI科技大本营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python爬取雪球股票数据_第2节 #硬声创作季

    数据程序python
    充八万
    发布于 :2023年08月04日 23:31:56

    Python爬取雪球股票数据_第5节 #硬声创作季

    数据程序python
    充八万
    发布于 :2023年08月04日 23:34:27

    Python爬取雪球股票数据_第6节 #硬声创作季

    数据程序python
    充八万
    发布于 :2023年08月04日 23:35:18

    基于网络共识的股票价格行为数据挖掘(英文

    的复杂性,急需从不同角度将各方面知识综合利用。本文提出了股票价格充分融合网络共识的策略,构建了基于网络共识的股票价格行为数据挖掘平台。从交易系统实时采集
    发表于 04-24 09:56

    股票行情实时数据网络采集LabVIEW程序

    本帖最后由 fantek 于 2013-12-26 12:56 编辑 根据网上资料设计了一个股票行情实时数据采集小程序。程序主要实现了行情数据网络采集接口、K
    发表于 12-26 12:49

    炒股福利:树莓派股票查询库(Python)

    的速度快很多。第五步:编写Python脚本我们将创建一个新目录和一个Python来获取股票数据。输入:mkdir stockquotecd stockquotenano stockquote.py然后
    发表于 01-06 14:20

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

    开发公司天瑞地安就来简要解析股票APP功能需求。  开发一个股票APP有哪些功能?一、手机客户端: 1.股票行情列表:显示各种
    发表于 02-13 19:16

    labview获取并分析股票数据

    ``
    发表于 03-08 09:50

    股票数据如何分析

    股票数据分析
    发表于 05-29 10:49

    视觉与运动_读取CDR

    视觉与运动_读取CDR(股票现价与市净率) 无聊做了个 读取CDR vi来帮我完成股票数据收集!
    发表于 07-22 23:21

    数据抓取问题

    新人想做一个装置,用于抓取水质监测数据,假设现在水质监测系统已经建成,但是想通过数据抓取装置获取水质数据,类似图片的形式,请问大佬们可以怎么
    发表于 11-02 11:18

    基于强化学习的股票预测系统的研究与设计

    股票市场是金融分析领域中重要而困难的问题。股票数据的分析和预测具有重大的理论意义和诱人的应用价值。BP 神经网络在目前的股票预测系统中应用广泛,但是作为有导师的学
    发表于 09-01 09:16 6次下载

    全球最大资产管理公司贝莱德集团增持苹果股票

    全球最大的资产管理机构——贝莱德集团(BlackRock)已经将其在苹果公司所持的股票数量增加到3.22亿股。
    发表于 01-26 20:49 447次阅读

    巨能机器人募资2.11亿元扩张产能以及升级技术

    本次IPO,巨能机器人发行股票数量不超过2000万股,募集大约2.11亿元资金,投建“工业机器人及智能装备研发及生产基地建设项目”等。
    的头像 发表于 10-14 09:34 921次阅读

    使用TTGO ESP32和Visuino从互联网获取股票数据

    电子发烧友网站提供《使用TTGO ESP32和Visuino从互联网获取股票数据.zip》资料免费下载
    发表于 11-04 09:29 0次下载
    使用TTGO ESP32和Visuino从互联网获取<b class='flag-5'>股票数据</b>