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

我们需要用到的知识包括 PyEcharts 的使用,tushare 库获取股票数据的方法以及 Flask 的基本用法。

获取股票数据

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

import tushare as ts
df = ts.get_hist_data('000001')
print(df)

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

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

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

PyEcharts作图

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

mydate = df[:30].index.tolist()
mydata = df[:30][['open', 'close', 'low', 'high']].values.tolist()def kline_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()],))return ckline_base(mydate, mydata).render_notebook()

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

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

构建 Web 框架

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

视图函数编写

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

from flask import Flask, render_template, request
from pyecharts import options as opts
from pyecharts.charts import Kline
import tushare as ts
import pandas as pd
from flask_bootstrap import Bootstrapapp = Flask(__name__)
bootstrap = Bootstrap(app)

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

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

@app.errorhandler(404)
def page_not_found(e):return render_template("404.html"), 404

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

@app.route("/")
def index():return render_template("index.html")

模板编写

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

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

{% extends "bootstrap/base.html" %}{% block title %}我的股票走势网站{% endblock %}{% block navbar %}
<div class="navbar navbar-inverse" role="navigation"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="/">Stock-Data</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li><a href="/">Home</a></li></ul></div></div>
</div>
{% endblock %}{% block content %}
<div class="container">{% block page_content %}{% endblock %}
</div>
{% endblock %}

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

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

{% extends "base.html" %}{% block title %}Page Not Found{% endblock %}{% block page_content %}
<div class="page-header"><h1>Not Found</h1>
</div>
{% endblock %}

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

编辑主逻辑

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

def check_stock(code):n = 0l = []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()for i in stock_list:if code in i:n += 1l = ielse:continuereturn n, l

如果股票正确,则返回 n=1,否则返回 n=0

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

def get_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'])
def get_kline_chart():stock_name = request.form.get('stockName')query_time = request.form.get('queryTime')if not stock_name:stock_name = '平安银行'if not query_time:query_time = 30status, stock_code = check_stock(stock_name)if status == 0:return 'error stock code or name'mydate, mydata = get_stock_data(stock_code[0], int(query_time))c = kline_base(mydate, mydata, stock_code[1])return c.dump_options()

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

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

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

前端页面编写

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

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

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

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

function getData() {var chart = 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("错误的股票代码!");}});}

最后我们看下整体的效果

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

往期回顾

一个 Python Bug 干倒了估值 1.6 亿美元的公司

如何高效、精准地进行图片搜索?看看轻量化视觉预训练模型

英伟达、AMD 高端芯片断供,国产芯片如何迅速崛起

Python 如何实现一键批量将 PDF 文档转 Word?

用Python轻松制作一个股票K线图网站相关推荐

  1. 利用 python numpy +matplotlib 绘制股票k线图

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from mat ...

  2. python 绘制k线图_利用python numpy+matplotlib绘制股票k线图的方法

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from mat ...

  3. python tushare mpf 画股票k线图

    在 Python3 环境下使用 Python2 代码时,碰到了如下的语句: #import matplotlib.finance as mpf 需要安装 pip install mpl_finance ...

  4. 太酷炫了,用python绘制股票K线图!

    大家好,我是小五 发现大家还是最喜欢股票基金话题呀~ 那说到股票基金就不得不提--K线图! 那小五今天就带大家???? 用python来轻松绘制高颜值的K线图???? 获取股票交易数据 巧妇难为无米之 ...

  5. Python绘制股票K线图

    目录 1 股票K线图知识了解 2 用Python绘制股票K线图 2.1 安装绘制K线图的mpl_finance库 2.2 引入相关库 2.3 用Tushare库获取股票基本数据 2.4 日期格式调整及 ...

  6. html5绘制股票图形,股票数据分析(五):绘制股票k线图(js+canvas + Python + json)

    本文介绍:利用 js+canvas 绘制股票k线图 HTML5 标签用于绘制图像(通过脚本,通常是 JavaScript). 不过, 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本来 ...

  7. python画k线图_Python+pyqtgraph:跟我学如何绘制股票K线图

    引言 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView ...

  8. 使用 Python 生成股票 K 线图

    引言 在股票分析中,经常需要用到 K 线图来分析股票的价格波动情况和交易量情况.本文将介绍如何使用 Python 和 pyecharts 库生成股票 K 线图,并将其保存为 HTML 文件. 准备数据 ...

  9. 【Python】绘制股票K线图(烛状图)并增加成交量和移动平均线(详细简单)

    Python绘制股票K线图(烛状图)并增加成交量和移动平均线: 准备工作: 1.这里需要使用到pandas和mplfinance工具库(自行安装好). 2.下载好股票数据,需要包括:时间.开盘价.最高 ...

最新文章

  1. 数学推导+纯Python实现机器学习算法26:PCA降维
  2. 阶乘和matlab实现
  3. Oracle闪回详解
  4. Learning to rank基本算法小结
  5. hadoop 2.7 java_Hadoop2.7环境搭建---Java环境变量
  6. mybatis plug 只查id_Mybatis一对多/多对多查询时只查出了一条数据
  7. 随笔-机器如何学习我们的知识?
  8. Jstatd命令(Java Statistics Monitoring Daemon)
  9. 20190822:(leetcode习题)字符串转换整数 (atoi)
  10. [轉]9个优秀的基于 JavaScript 与 CSS 的 Web 图表框架
  11. 用Java实现向Cassandra数据库中插入和查询数据
  12. 手机中的传感器及其应用场景
  13. loadRunner12压力测试工具使用流程
  14. win7nodejs压缩包配置环境变量
  15. Diss 暴雪爸爸,炉石是否还是“良心”游戏?
  16. 监控摄像头RTSP低延时无插件直播解决方案
  17. 计算机网络英文习题(中文及答案解析)
  18. 【javascript】纯原生js的轻便组织结构图,树状图,支持自定义样式
  19. 基于野火stm32指南者的中断函数编写过程总结
  20. 使用office2013编辑html,office2013软件同时支持多个文档编辑

热门文章

  1. Excel真的是三维地图可视化制作最好的选择吗?
  2. GeoPandas入门 | 04-空间连接
  3. Vue3.0导出数据为自定义样式Excel
  4. erp5开源制造业erp产品变量介绍
  5. 学习Java第14天,关于连连看的java秒杀外挂的研究(7)
  6. oracle封面制作,简历个人求职封面电子版模板
  7. 实战项目:文件搜索软件Search_Everything
  8. hd2 刷android
  9. Js逆向-猿人学(2)动态cookie
  10. mysql er 图_数据库ER图基础概念整理