# encoding=utf-8
from Tkinter import *
from ScrolledText import ScrolledText
import urllib2
import json
import ssl
import time
import threading
'''
根据chrome 开发者模式取得城市代码参数,此步骤的目的通过中文去定位到对应英文城市代码
'''
citylist = open('C:\Users\Think\Desktop\citylist.txt')
city = citylist.read() # 把文件内容赋值给city
citylist.close()
# 取出城市对应代码,进行分割得到所需
tmp_c = city.split('@')
city_d = {}
for i in tmp_c:
if not i:
continue # 因为第一位为空所以判断如果为空则继续循环,不为空继续
city_d[i.split('|')[1]] = i.split('|')[2]
# 城市对应城市代码生成的dic
# 对应的座位类型,这里是硬卧

city_s = city_d['北京']
city_a = city_d['天津']
seat = 'queryLeftNewDTO'
yw = 'yw_num'
'''
12306证书验证会影响访问,所以要关闭掉
'''
ssl._create_default_https_context = ssl._create_unverified_context # 关闭证书验证

#格式化字符串,把往返城市和时间写入并且访问
def getList():
s_time = '2017-04-20'
html = urllib2.urlopen(
"https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT" % (
s_time, city_s, city_a))
content = html.read()
text1 = json.loads(content) # json不是一个类型是一种表达方式
# print text1
return text1 # 转换成dic

#根据座位类型查询火车票余票
def train_name():
train_name = getList()
for i in train_name['data']: # 通过键值取到想要的信息,这里有个坑需要注意,这个字典里面又嵌套了一个字典以queryLeftNewDTO作为key,同时它也是一个value
x = 0
while i[seat][yw] == u'无': # 如果没票打印无票并且循环直到有票
x += 1
time1 = time.strftime('%Y-%m-%d %H:%M:%S')
text.insert(END, u'检测时间%s:\n' % time1)
text.insert(END, u'第%d次查询:\n' % x)
text.insert(END, u'无票\n')
time.sleep(2)
else:
print u'有票%s'%(i[seat][yw])
# print u'第%d次查询:'%x
# print u'无票'
if i[seat][yw]!=u'无':#如果有票就打印出对应车次时间等等
tmp = u'''车次:%s
出发时间:%s
到达时间:%s
历时:%s
硬卧:%s\n''' % (i['queryLeftNewDTO']['station_train_code'], i['queryLeftNewDTO']['start_time'],
i['queryLeftNewDTO']['arrive_time'], i['queryLeftNewDTO']['lishi'], i[seat][yw])
text.insert(END,tmp)#将数据插入GUI用于显示

# print trainlist

#采用多线程进行处理
def start():
t1 = threading.Thread(target=train_name)
t1.start()

#建立一个GUI界面
root = Tk()
root.title(u'查询火车余票')
root.state("zoomed")
root.geometry('300x500')
text = ScrolledText(root, font=('微软雅黑', 16))
text.pack()

button = Button(root, text=u'开始抢票', font=('微软雅黑', 16), command=start) # target目标函数名字切记不要()不然点击按钮就失效了
button.pack()
root.mainloop()

python打造12306余票实时监控的更多相关文章

  1. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】

    概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...

  2. Java爬取12306余票

    一.前言 今年国庆和中秋一起放,虽然很欢快,但是没有票了!!! 于是自己倒腾了一个查询余票的小程序. 二.准备工作 1.先打开12306的页面 2.然后右键检查,点network 3.再点一下1230 ...

  3. 【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

    实时监控股市重大公告的Python爬虫小技巧 精力有限的我们,如何更加有效率地监控信息? 很多时候特别是交易时,我们需要想办法监控一些信息,比如股市的公告.如果现有的软件没有办法实现我们的需求,那么就 ...

  4. python写12306抢票

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...

  5. Python操作12306抢票脚本

    有一段时间没有使用Python了,前几天经朋友提起一篇关于用Python实现抢火车票的文章,百度了实现抢火车票的技术细节,网上却有不少资料,也不是新鲜的东西.在了解了一些技术手段,阅读了一些大神的博文 ...

  6. php 通过API接口连接12306余票查询

    <?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta cont ...

  7. 用webpy实现12306余票查询

    效果

  8. python subprocess.Popen 控制台输出 实时监控百度网ping值

    import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PI ...

  9. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控(centos7环境)

    前提条件,已经安装jmeter并可以运行 1.安装influxdata wget et https://dl.influxdata.com/influxdb/releases/influxdb-1.7 ...

随机推荐

  1. python3 - 元组、集合

    元组(tuple) 有序集合,不可变 a(1,2,3) a[0]获取第一个值 集合(set)增删改 >>> b = set('abc') >>> bset(['a' ...

  2. Jmeter资源监控工具ServerAgent运行原理的一些研究

    用过Jmeter的应该都了解,有个ServerAgent工具,放在linux或者windows服务器上开启服务后,在Jmeter中配置下监视器,就可以抓取到服务器的一些资源信息,抓取的主要是cpu.内 ...

  3. Jmeter——分布式并发

    1.修改配置文档 在Jmeter文件夹bin目录下找到jmeter.properties: 在该文件内找到 remote_hosts=127.0.0.1,将其修改为自己的远程压力机,这里作为练习我就用 ...

  4. PytorchZerotoAll学习笔记(五)--逻辑回归

    逻辑回归: 本章内容主要讲述简单的逻辑回归:这个可以归纳为二分类的问题. 逻辑,非假即真.两种可能,我们可以联想一下在继电器控制的电信号(0 or 1) 举个栗子:比如说你花了好几个星期复习的考试(通 ...

  5. Scrum立会报告+燃尽图(十一月十七日总第二十五次):设计调查问卷;修复上一阶段bug

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  6. “我爱淘”第二冲刺阶段Scrum站立会议7

    完成任务: 完成学院分类的点击查看书籍功能,可以点击书的条目查看书的详细信息.将登陆界面以及注册发布界面完善了一下修复一些bug. 计划任务: 将书的详细信息进行完善,并且可以点击收藏以及已预订等功能 ...

  7. static块的本质

    在网上看到了下面的一段代码: public class Test { static { _i = 20; } public static int _i = 10; public static void ...

  8. python 动态获取当前运行的类名和函数名的方法

    一.使用内置方法和修饰器方法获取类名.函数名 python中获取函数名的情况分为内部.外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性 复制代码代码如下: def a():pa ...

  9. 搜索引擎Elasticsearch REST API学习

    Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...

  10. WPF浏览器应用程序与JS的互调用(不用WebBrowser)

    首先说些题外话,很久没有写博客了,空间里面的大部分文章还是11年写的.那时候刚毕业就来到这家公司,参与到一个Asp.net MVC的项目开发中,这个项目是一个全新的项目,连项目开发框架都没有,亏得领导 ...