您的位置:首页 > 编程语言 > Python开发

python爬取学校体育部的跑超数据并用Tkinter写出应用并进行封装生成exe文件

2017-03-11 21:36 489 查看
之前看了python,自己写了个小应用软件通过爬虫获取学校体育部的跑操数据(实时更新)并用python自带的Tkinter写了个小应用并用PyInstaller封装生成exe文件,然后就可以用这个小软件查自己和室友的跑操记录了。

代码里涉及的隐私信息用*代替了;为大家阅读带来不便请见谅;

代码如下:

#-*-coding:utf-8-*-
from Tkinter import*
import os
import time
import requests

txt=[]
top = Tk()
label = Label(top,text='604-1全体成员跑操查询-lin')
label.pack()
label2 = Label(top,text="现在的时间是:%s"%time.ctime())
label2.pack()
dirfm = Frame() #导入一个框架把列表框和滚动条连接起来
dirsb = Scrollbar(dirfm)
dirsb.pack(side = RIGHT,fill=Y)
dirs = Listbox(dirfm,height=20,
width = 50,yscrollcommand=dirsb.set)
dirs.pack(side=LEFT,fill=BOTH)
dirfm.pack()
"""上面这一段是Tkinter的界面设计代码,包括了滚动条列表框等页面展示在下面~"""
def Searchtimes4(): #此函数用来爬取数据,并在列表框中输出,下面的Searchtimes1235()形式都是一样的;
#mylist=['hello','world']
hea = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer'   :    'http://zc*********.cn/'}
url = 'http://zc*************ent'
data ={
'authentictyToken':"deb4cbb******8ef757c198a075e7",
'number':"******",
'name':"***"}  #data构造表单,这里可以用火狐来查看表单包括哪些内容;
loginhtml = requests.post(url,data = data,headers = hea).text
res_tr = r'<td\sarg\=(.*?)</td>'#正则表达式用于筛选数据;
m_tr = re.findall(res_tr,loginhtml,re.S|re.M)
dirs.insert(END,"*的次数:")

res_ptr = r'<span\sclass\=\"badge\">(.*?)</span>'#同样是正则表达式
m_tr1 = re.findall(res_ptr,loginhtml,re.S|re.M)
for lines in m_tr1:
dirs.insert(END,lines)
for line in m_tr:   #在列表框按行输出
dirs.insert(END,line)

def Searchtimes1():
#mylist=['hello','world'] #测试时用的例子,这里已经屏蔽掉了
hea = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer'   :    'http://z********du.cn/'}
url = 'http://zccx***********dent'
data ={
'authentictyToken':"deb4cbb***********98a075e7",
'number':"B********",
'name':"***"}
loginhtml = requests.post(url,data = data,headers = hea).text
res_tr = r'<td\sarg\=(.*?)</td>'
m_tr = re.findall(res_tr,loginhtml,re.S|re.M)
dirs.insert(END,"*的次数:")

res_ptr = r'<span\sclass\=\"badge\">(.*?)</span>'
m_tr1 = re.findall(res_ptr,loginhtml,re.S|re.M)
for lines in m_tr1:
dirs.insert(END,lines)
for line in m_tr:
dirs.insert(END,line)

def Searchtimes2():
#mylist=['hello','world']
hea = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer'   :    'ht**********.cn/'}
url = 'http://zc*******************'
data ={
'authentictyToken':"de*************075e7",
'number':"********",
'name':"***"}
loginhtml = requests.post(url,data = data,headers = hea).text
res_tr = r'<td\sarg\=(.*?)</td>'
m_tr = re.findall(res_tr,loginhtml,re.S|re.M)
dirs.insert(END,"*的次数:")

res_ptr = r'<span\sclass\=\"badge\">(.*?)</span>'
m_tr1 = re.findall(res_ptr,loginhtml,re.S|re.M)
for lines in m_tr1:
dirs.insert(END,lines)
for line in m_tr:
dirs.insert(END,line)

def Searchtimes3():
#mylist=['hello','world']
hea = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer'   :    'http**********************'}
url = 'http******************'
data ={
'authentictyToken':"deb******************",
'number':"******",
'name':"***"}
loginhtml = requests.post(url,data = data,headers = hea).text
res_tr = r'<td\sarg\=(.*?)</td>'
m_tr = re.findall(res_tr,loginhtml,re.S|re.M)
dirs.insert(END,"*的次数:")

res_ptr = r'<span\sclass\=\"badge\">(.*?)</span>'
m_tr1 = re.findall(res_ptr,loginhtml,re.S|re.M)
for lines in m_tr1:
dirs.insert(END,lines)
for line in m_tr:
dirs.insert(END,line)

def Searchtimes5():
#mylist=['hello','world']
hea = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer'   :    'http://z***********n/'}
url = 'http***************'
data ={
'authentictyToken':"deb*******************",
'number':"*******",
'name':"***"}
loginhtml = requests.post(url,data = data,headers = hea).text
res_tr = r'<td\sarg\=(.*?)</td>'
m_tr = re.findall(res_tr,loginhtml,re.S|re.M)
dirs.insert(END,"***的次数:")

res_ptr = r'<span\sclass\=\"
b466
badge\">(.*?)</span>'
m_tr1 = re.findall(res_ptr,loginhtml,re.S|re.M)
for lines in m_tr1:
dirs.insert(END,lines)
for line in m_tr:
dirs.insert(END,line)

dirsb.config(command=dirs.yview)
"""这里的代码可以用python字典把形式弄的简便点,用字典就不用调用5个函数,直接在一个函数中利用不同数据的表单看起来比较干净,不过因为我想要查的人不多,而且这样写比较方便,直接改一下函数post的表单里的两个值,学号和姓名就好了,就没有深入考虑用python的字典了"""
dosearch = Button(top,text = '查询截止到日前*的次数',command = Searchtimes1,fg='blue')
dosearch.pack()
dosearch = Button(top,text = '查询截止到日前*的次数',command = Searchtimes2,fg='blue')
dosearch.pack()
dosearch = Button(top,text = '查询截止到日前*的次数',command = Searchtimes3,fg='blue')
dosearch.pack()
dosearch = Button(top,text = '查询截止到日前*的次数',command = Searchtimes4,fg='blue')
dosearch.pack()
dosearch = Button(top,text = '查询截止到日前*的次数',command = Searchtimes5,fg='blue')
dosearch.pack()

#quitesearch = Button(top,text = '退出',command = top.quit)
#quitesearch.pack()     """这两行代码是加一个退出的控件,不过感觉没必要就没加了"""
mainloop()




运行界面:



另外还有可以把代码加到最近流行的图灵机器人里面,然后把图灵机器人接到群里,这样只要回复查跑超数据就可以自动给出回复了,接到手机qq或微信里比在电脑用exe方便多了;

大学生活的小记录,写到这里了,有机会再更新有关Tkinter和PyInstaller的使用博文;有问题可以留言,有时间我一定会回的;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 应用 数据 tkinter