访问股票信息工具

  • 整体思路
    • 访问股票信息的接口
    • 数据库以及表结构
    • 简单的界面设计
    • 功能说明

这里给大家介绍一下,当时初学几天python时写的一个小工具,访问实时股票信息,之前用java写过一个模拟股票交易网站,后来玩python随便写了一个简单的来玩。

整体思路

根据以下几个方面介绍

访问股票信息的接口

使用的接口是新浪的一个股票数据接口,最开始这个接口可以直接访问,最近发现加了一个请求头的要求
代码如下:

#获取股票信息的方法
def getStocksMessages(src_num):index=0list=[]header = {"Referer":"https://finance.sina.com.cn"}request=urllib.request.Request('http://hq.sinajs.cn/list='+src_num,headers=header)# for line in urlopen('http://hq.sinajs.cn/list='+src_num,headers=header):for line in urlopen(request):line = line.decode('gbk')  # Decoding the binary data to text.#print("stocks===="+line)i=line.index('"')if(line.find(',')>0):j=line.index(',')else :continuenum=line[11:19]name=line[i+1:j]ls=line.split(',')price=float(ls[3])#print(ls)dict={"股票代码":num,'股票名称':name,"当前股价":price}list.append(dict)index+=1#返回列表,列表内的数据类型为字典  一个字典对应一支股票return list

数据库以及表结构

一个存贮了所有上市A股的股票代码表,总共有几千条数据,之前是用JS写的一个方法存进来的,这里没贴了。
这里是一张用来存贮股票实时价格的表,方便后面进入界面显示数据的初始数据,接口可以获取很多股票的相关信息,这里只是获取了一个价格,没写复杂了。

后台数据库使用的是mysql,相关交互代码:

#连接数据库方法
def getConnectMysql():mydb=mysql.connector.connect(host="localhost",user="root",passwd="你自己的数据库密码",database="test")return mydb
#数据插入方法  当前写死
#1 插入成功  0 失败    -1已经存在
def insertIntoMysql(stocknums):mydb=getConnectMysql()mycursor=mydb.cursor()#先判断股票id是否在数据库中已经存在list_s=stocknums.split(',')#标识符flag=0bad_stockid=''for l in list_s:f=IsExistData(l)if(f!=flag):flag=1bad_stockid=lprint(l+'已经存在不能插入!')breakelse :passif(flag==0):#无论什么数据类型 都使用%s占位符sql='insert into test_python (num,name,price) values (%s,%s,%s)'#调用获取股票信息方法list_stocks=getStocksMessages(stocknums)val=[]for l in list_stocks:tuples=(l['股票代码'],l['股票名称'],float(l['当前股价']))val.append(tuples)#执行插入到数据库中#批量插入方法  executemanyprint(val)try:mycursor.executemany(sql,val)mydb.commit()return 1except Exception as e:print('数据插入出错:',e)return 0else:print("数据插入成功!")return 1else:#数据已经存在return -1
#数据查询方法
def queryDataFromMysql(sql):#连接数据库mydb=getConnectMysql()mycursor=mydb.cursor()mycursor.execute(sql)#fetchall()获取所有记录   #fetchone()获取一条记录#返回结果是集合,集合里面是元组数据类型myresult=mycursor.fetchall()return myresult
#模糊查询 输入文字也能查询到股票数据
def queryByChars(values):sql=" select src_num from stocks where src_num like %s  or  scr_name like %s "mydb=getConnectMysql()mycursor=mydb.cursor()mycursor.execute(sql,values)listdata=mycursor.fetchall()#print(listdata)#获取股票代码字符串str_srcnum=''for ln in listdata:str_srcnum=str_srcnum+ln[0]+','print("querybychars"+str_srcnum)list_query=getStocksMessages(str_srcnum)#print(list_query)return list_query
#更新股票价格到数据库中
def updataPrice():#先查询数据库获取所有的股票名称strsql='select num from test_python'mydb=getConnectMysql()mycursor=mydb.cursor()mycursor.execute(strsql)listnum=mycursor.fetchall()#print(listnum)#更新数据#先获得最新pricestr_srcnum=''for ln in listnum:str_srcnum=str_srcnum+ln[0]+','#print(str_srcnum)# 获得新的数据列表listnew=getStocksMessages(str_srcnum)update_val=[]for ln in listnew:tuples=(float(ln['当前股价']),ln['股票代码'])update_val.append(tuples)#print(update_val)update_sql='update test_python set price=%s where num=%s'try:mycursor.executemany(update_sql,update_val)mydb.commit()#必须commit不然不生效except Exception as e:print('数据更新失败!!!',e)raiseelse:print('数据更新成功!!')
#删除指定数据
def deleteDataByStockid(stockid):sql="delete from test_python where num = %s"mydb=getConnectMysql()mycursor=mydb.cursor()#传值类型必须为元组val_tup=(stockid,)try:mycursor.execute(sql,val_tup)mydb.commit()print("数据删除成功!")return 1except Exception as e:print("数据删除失败!"+e)return 0
#使用到的外部库
from urllib.request import urlopen
import urllib
import mysql.connector
import os

简单的界面设计

python界面设计使用的是 tkinter 模块,这个一开始也没有完全玩明白,然后就做了个简单的外壳,能正常显示数据就行,大家有兴趣的可以自己研究,个人觉得还是用pyqt5好些,可以自己拖拽设计界面。

直接贴代码了,有兴趣的可以先运行起来,然后再去做自己的修改,不然直接看代码会很烦。

#from tkintertable import TableCanvas, TableModel
import tkinter,time,decimal,math,string
import opt_database as wt
from tkinter import ttk,messagebox
import os#清空表格方法
def deleteData():#清空组件x=tree.get_children()for item in x:tree.delete(item)#print(sys.version_info)#查询数据到表格方法
def queryData(stocks,flag):#先清空表格,再做查询deleteData()#sql='select * from test_python'#如何输入文本框没有内容,就执行查询所有股票信息的代码input_text=textinput.get()if(input_text=="" or  flag==1):listdata=wt.queryDataFromMysql("select * from test_python")#添加数据到表格中i=0for l in listdata:tree.insert('',i,text='第'+str(i+1)+'行',values=l)#print(i,'line'+str(i))#添加右键功能i+=1#否则根据文本框信息查询else:input_text='%'+input_text+'%'#查询过来的是列表{字典}t_val=(input_text,input_text)print(t_val)list_data=wt.queryByChars(t_val)list_val_tuple=[]for l in list_data:tuples=(l['股票代码'],l['股票名称'],float(l['当前股价']))list_val_tuple.append(tuples)#添加数据到表格中i=0for lv in list_val_tuple:tree.insert('',i,text='第'+str(i+1)+'行',values=lv)#print(i,'line'+str(i))i+=1#插入数据方法
def InsertData():#获取用户输入的字段stocknum=textinput.get()#print(stocknum)if(stocknum!=""):ret=wt.insertIntoMysql(stocknum)if(ret==-1):messagebox.showerror(title='错误',message='该股票已经存在!')elif(ret==1):messagebox.showinfo(title='通知',message='数据插入成功!')else:messagebox.showinfo(title='通知',message='不输入股票代码你插什么???')#更新价格函数
def updateprice():wt.updataPrice()queryData("",1)#右键表格时触发事件
def clickTree(event):if(tree.focus()!=""):menu_bar.post(event.x_root,event.y_root)#选中数据右键点击删除事件
def deleteDataFromMysql():#获得当前选中的行的第一列值  即股票代码stockid='';for item in tree.selection():item_text=tree.item(item,"values")stockid=item_text[0]#弹窗提示:bool_res=messagebox.askyesno('询问', '确定删除代码为'+stockid+'的数据吗', parent=root)#调用删除数据代码if(bool_res==True):#print(stockid)ret=wt.deleteDataByStockid(stockid)if(ret==1):messagebox.showinfo(title='通知',message='数据删除成功!')#更新列表数据queryData("",1)elif(ret==0):messagebox.showerror(title='错误',message='数据删除失败!')else:pass#将选中的数据插入到数据库
def select_Insert():stockid='';for item in tree.selection():item_text=tree.item(item,"values")stockid=item_text[0]ret =wt.insertIntoMysql(stockid)if(ret==1):messagebox.showinfo(title='通知',message='插入成功!')#更新列表数据queryData("",1)elif(ret==-1):messagebox.showerror(title='错误',message='该调数据已经存在,不能再插入!')else:messagebox.showerror(title='错误',message='插入数据失败!')#生成root主窗体
root=tkinter.Tk();
root.geometry('800x600');#设置主框体大小
root.title('测试')#设置标题
root.resizable(0,0)
#标签
label=tkinter.Label(root,text='股票数据',fg='red')#生成标签
label.pack();#将标签添加到主窗体中
#定义文本输入框
textinput=tkinter.Entry(width=50)
textinput.pack()
#按钮
button1=tkinter.Button(root,text='更新价格',width=10,command=updateprice) ##command绑定按钮事件
#sqlstr="select * from test_python"
#传参用lambda关键字
button2=tkinter.Button(root,text='查询数据',width=10,command=lambda:queryData("",0))
button3=tkinter.Button(root,text='清空表格',width=10,command=deleteData)
button4=tkinter.Button(root,text='插入数据',width=10,command=InsertData)
#将按钮显示
#button1.pack(side=tkinter.LEFT)
button1.pack(padx=200,pady=10,ipadx=10)
button2.pack(padx=10)
button3.pack(padx=10)
button4.pack(padx=10,ipadx=10,after=textinput)#表格显示
tree=ttk.Treeview(root)
tree.pack(padx=65,before=button1,after=label)
#定义列
tree['columns']=('股票代码','股票名称','当前价格')
#设置列 不显示
tree.column('股票代码',width=150)
tree.column('股票名称',width=150)
tree.column('当前价格',width=150)
#显示表头
tree.heading('股票代码',text='股票代码(num)')
tree.heading('股票名称',text='股票名称(name)')
tree.heading('当前价格',text='当前价格(price)')
#绑定回车键与拆线呢数据按钮效果一致
#button2.bind('<Return>',lambda:queryData(sqlstr,0))
#右键表格出现选择标签
#菜单
menu_bar=tkinter.Menu(root,tearoff=False)
menu_bar.add_cascade(label='删除',command=deleteDataFromMysql)
menu_bar.add_cascade(label="插入到数据库",command=select_Insert)tree.bind('<3>',clickTree)#进入界面就查询数据显示出来
queryData("",1)#进入消息循环(必须组件)
root.mainloop()
# os.system("pause")

功能说明

简单的界面设计 上面的所有代码,放在第一个py文件里面,下面的所有代码放在第二个文件里面
下面的代码文件需要引用第一个文件,就是 opt_database 这个模块,可以自定义名字
然后直接运行第二个文件就行了,有兴趣的可以打包成一个exe来运行。

上面的功能实现了 根据股票号和名称模糊查询实时股票数据,删除、插入股票到数据库,更新所有股票价格等。
查询展示:模糊查询包含好字的股票数据

【使用Python编写一个访问实时股票数据的工具】包括获取股票信息、与数据库交互等相关推荐

  1. Python搭建一个系统信息实时监控数据可视化大屏

    本文分享使用python搭建服务器应用的监控系统面板,主要流程如下: 1.数据库中创建数据表 2.建立数据库连接 实时数据插入数据表,实时查询更新面板数据准备 3.监控中心大屏制作 具体步骤: 1.创 ...

  2. python同花顺股票实时数据_web实时股票数据展示

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 所有这些都是实时发生的,并推送到仪表板供用户评估事物和行为. 最终,为了能够从任 ...

  3. python数据预测_利用Python编写一个数据预测工具

    利用Python编写一个数据预测工具 发布时间:2020-11-07 17:12:20 来源:亿速云 阅读:96 这篇文章运用简单易懂的例子给大家介绍利用Python编写一个数据预测工具,内容非常详细 ...

  4. python编写登录_通过Python编写一个简单登录功能过程解析

    通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...

  5. 获取历史和实时股票数据接口

     http://blog.sina.com.cn/s/blog_510844b70102wrvf.html 实时股票数据接口 股票数据的获取目前有如下两种方法可以获取: 1. http/javas ...

  6. python软件怎么用-如何使用Python编写一个桌面软件系统?步骤有哪些

    建议直接用python编写一个网页服务器,然后就在本机用浏览器来使用. 简单介绍一下这样做的好处: [1]python的桌面GUI模块都不太好用,比如pyQT需要额外安装很大的QT,tkinter则相 ...

  7. 用python编写一个高效搜索代码工具

    用python编写一个高效搜索代码工具 大多码农在linux环境下使用grep+关键词的命令搜索自己想要的代码或者log文件.今天介绍用python如何编写一个更强大的搜索工具,windows下也适用 ...

  8. 搜索python代码的软件_用python编写一个高效搜索代码工具

    用python编写一个高效搜索代码工具 大多码农在linux环境下使用grep+关键词的命令搜索自己想要的代码或者log文件.今天介绍用python如何编写一个更强大的搜索工具,windows下也适用 ...

  9. 如何用Python编写一个求 1到n阶乘之和的程序

    各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...

最新文章

  1. LeetCode简单题之删列造序
  2. mysql事务实现数据更新_MySql事务select for update及数据的一致性处理讲解
  3. 【案例】弱电机房用电负荷计算意义及计算方法
  4. VTK:可视化之BackfaceCulling
  5. TypeScript 枚举指南
  6. Java ArrayList isEmpty()方法与示例
  7. 我们为什么都应该坚持写博客,意义何在?
  8. Android 系统(68)---使用Xshell在Windows系统和Linux系统之间进行文件传输
  9. 关于面试 | 面试官
  10. C语言Register关键字:利用寄存器提升访问效率
  11. Maven pom.xml中的元素modules、parent、properties以及import(转)
  12. Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license”
  13. 对 /etc/rc.d/init.d 目录的一点理解
  14. 向量线性无关和正交及其关系
  15. 谢烟客-----Linux的发展史
  16. 异步加载loading
  17. 通过wal文件查看lsn和txid,lsn和txid对应关系
  18. HTML5七夕情人节表白网页(爱心雨-满屏爱心飘落)HTML+CSS+JavaScript
  19. OpenCV色域转换
  20. 数据结构 插入排序(InsertionSort Sort) 详解 附C++代码实现:

热门文章

  1. C语言:通讯录程序设计(多功能)
  2. linux gateway添加,linux下添加路由的方法:
  3. 如何用虚拟网卡实现Windows10和虚拟机VM的共享
  4. FiddlerScript编程
  5. OPPO尝鲜android版本更新,OPPOColorOS系统国内首发安卓8.1,用户体验大升级
  6. 十个Flex/Air疑难杂症及解决方案简略
  7. java automapper 使用_AutoMapper使用
  8. [句型] 二十五、特殊疑问句 2 [ whose ] [ when ] [ whom ] [ which ] [ how ]
  9. 案例 | 致力做全球“屏王”,九山电子建立多语言企业站...
  10. Android 使用 style 给 Activity 设置背景(background 和 windowBackground的区别)