python2.7 实现的实时监控指定股票价格的小程序

实时监控指定股票价格

本文涉及到的python 库 有 Tkinter,sys,urllib2,time
在开始之前我们首先要确定股票信息的来源,在此以东方财富网为例,在分析网站的过程中发现直接读取HTML源代码是抓不到数据的,很显然该页面使用了AJAX动态的请求数据在页面显示,因而我们只要简单的获取到这个api就好了。
- 获取东方财富网查询股票信息的api
- 使用urllib2
- 使用Tkinter库编写GUI程序

使用Google浏览器开发者工具获取api F12

在首页随便查一只股票
这里写图片描述
以300101为例,F12打开开发者工具,查看页面加载的js,依次排查response数据找到我们需要的结果
这里写图片描述
复制请求连接
这里写图片描述

请求URL容:
http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=3001012&sty=CTBF&st=z&sr=&p=&ps=&cb=var%20pie_data=&js=(x)&token=28758b27a75f62dc3065b81f7facb365&_=1497258906443
在浏览器直接提交该链接看一下效果
这里写图片描述
非常完美正是我们想要的结果。

接下来就是码代码实现逻辑了。

基本需求,因为要上班,时不时的打开手机看股票或者开网页去看,被领导看到了影响会不好,因而做一个小窗口,放在桌面上查看很方便也很隐蔽。所以程序要满足如下需求,窗口小巧,只显示股票价格主要信息,能根据输入的股票代码查询信息。

代码如下

# -*- coding:utf-8 -*-
#查看股票实时价格

__author__ = 'zyy'
from Tkinter import *
import sys,urllib2,time

count = 0
root = Tk()
title = Label(root,text=u'股票代码')
title.pack()
l_stock_no = Entry(root)
l_stock_no.pack()
content = Label(root,text=u'实时行情')
content.pack()
class StockMonitor(Frame):
    msec = 1000 
    def __init__(self,parent=None,**kw):
        Frame.__init__(self,parent,kw)
        self._running = False
        self.c_date = StringVar()
        self.c_time = StringVar()
        self.stockinfo  = StringVar()
        self.flag = True
        self.makeWidget()

    def makeWidget(self):
        label_date = Label(self,textvariable=self.c_date)
        label_date.pack()
        label_time = Label(self,textvariable=self.c_time)
        label_time.pack()
        label_stock = Label(self,textvariable=self.stockinfo)
        label_stock.pack()

        btn_start = Button(self,text='start',command=self.start)
        btn_start.pack(side=LEFT)
        btn_end = Button(self,text='end',command=self.quit)
        btn_end.pack(side=LEFT)

    def get_stock_info(self,stock_no,num_retries=2):
        try:
            url = 'http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd='+stock_no.strip()+'2&sty=CTBF&st=z&sr=&p=&ps=&cb=var%20pie_data=&js=(x)&token=28758b27a75f62dc3065b81f7facb365&_=1496312544427'
            headers = {'User-agent':'WSWP'}
            request = urllib2.Request(url,headers=headers)
            page = urllib2.urlopen(request)
            page_content = page.read()
        except urllib2.URLError as e:
            print  'download error:',e.reason
            page_content = None
            if num_retries > 0:
                if hasattr(e,'code' and 500 <= e.code <600):
                    # recursively retry 5xx HTTP errors
                    return get_stock_info(stock_no,num_retries-1)
        return page_content

    def _update(self):
        self._set_count()
        self.timer = self.after(self.msec,self._update)

    def _set_count(self):

        stock_info = self.get_stock_info(l_stock_no.get())
        if stock_info is not None:
            stock_info = stock_info[14:64]
        today1 = str(time.strftime('%Y-%m-%d', time.localtime(time.time())))
        time1 = str(time.strftime('%H:%M:%S', time.localtime(time.time())))
        self.stockinfo.set(stock_info)
        self.c_date.set(today1)
        self.c_time.set(time1)

    def start(self):
        self._update()
        self.pack(side = TOP)



def main():

    stock = StockMonitor(root)
    stock.pack(side = BOTTOM)
    root.mainloop()
    root.geometry('350x250')

if __name__ == '__main__':
    main()

将Python 程序打包成可执行文件,使用pyinstaller 工具,使用方法可参考官网

http://www.pyinstaller.org/
PyInstaller Quickstart
Install PyInstaller from PyPI:
pip install pyinstaller
Go to your program’s directory and run:
pyinstaller yourprogram.py

如果出现UnicodDecodeError:ascii codec can’t decode byte …等等错误,找到出错的python 文件 ,在源码里开头加上如下代码

if sys.getdefaultencoding() != 'gbk': 
 reload(sys) 
 sys.setdefaultencoding('gbk')

本例打包命令如下


>> pyinstaller -F -w stockmonitor.py

参数说明 :
-F, –onefile Py代码只有一个文件
-D, –onedir Py代码放在一个目录中(默认是这个)
-K, –tk 包含TCL/TK
-d, –debug 生成debug模式的exe文件
-w, –windowed, –noconsole 窗体exe文件(Windows Only)
-c, –nowindowed, –console 控制台exe文件(Windows Only)
X, –upx 使用upx压缩exe文件
-o DIR, –out=DIR 设置spec文件输出的目录,默认在PyInstaller同目录
–icon=FILE.ICO 加入图标(Windows Only)
-v FILE, –version=FILE 加入版本信息文件

效果图如下
这里写图片描述

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python2.7可以使用第三方库pyinotify来实现文件监控。pyinotify是一个Linux内核提供的inotify机制的Python封装,可以在Python程序中监控文件系统事件。 以下是一个简单的示例代码,可以监控指定目录下的文件创建、删除和修改事件: ```python import pyinotify # 定义文件系统事件处理器 class EventHandler(pyinotify.ProcessEvent): def process_IN_CREATE(self, event): print("File created: %s" % event.pathname) def process_IN_DELETE(self, event): print("File deleted: %s" % event.pathname) def process_IN_MODIFY(self, event): print("File modified: %s" % event.pathname) # 创建inotify实例 wm = pyinotify.WatchManager() mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY # 创建文件系统事件处理器实例 handler = EventHandler() # 创建notifier实例,关联watch manager和event handler notifier = pyinotify.Notifier(wm, handler) # 添加监控目录 wm.add_watch('/path/to/directory', mask, rec=True) # 开始监控 notifier.loop() ``` 在上面的代码中,我们定义了一个EventHandler类来处理文件系统事件,它继承自pyinotify.ProcessEvent。在process_IN_CREATE、process_IN_DELETE和process_IN_MODIFY三个方法中,我们分别处理了文件创建、删除和修改事件。 然后,我们创建了一个WatchManager实例和一个事件掩码mask,并将其关联到handler实例。接着,我们添加了要监控的目录,并调用notifier.loop()方法开始监控。 当有文件被创建、删除或修改时,EventHandler类中对应的方法就会被调用,打印出相应的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值