python打造12306余票实时监控
# 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余票实时监控的更多相关文章
- 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】
概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...
- Java爬取12306余票
一.前言 今年国庆和中秋一起放,虽然很欢快,但是没有票了!!! 于是自己倒腾了一个查询余票的小程序. 二.准备工作 1.先打开12306的页面 2.然后右键检查,点network 3.再点一下1230 ...
- 【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫
实时监控股市重大公告的Python爬虫小技巧 精力有限的我们,如何更加有效率地监控信息? 很多时候特别是交易时,我们需要想办法监控一些信息,比如股市的公告.如果现有的软件没有办法实现我们的需求,那么就 ...
- python写12306抢票
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...
- Python操作12306抢票脚本
有一段时间没有使用Python了,前几天经朋友提起一篇关于用Python实现抢火车票的文章,百度了实现抢火车票的技术细节,网上却有不少资料,也不是新鲜的东西.在了解了一些技术手段,阅读了一些大神的博文 ...
- php 通过API接口连接12306余票查询
<?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta cont ...
- 用webpy实现12306余票查询
效果
- python subprocess.Popen 控制台输出 实时监控百度网ping值
import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PI ...
- 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控(centos7环境)
前提条件,已经安装jmeter并可以运行 1.安装influxdata wget et https://dl.influxdata.com/influxdb/releases/influxdb-1.7 ...
随机推荐
- github如何删除仓库中文件夹
github项目中,经常大家更新.添加都非常熟悉,但是如果想要删掉一个文件夹,很多人就不知道怎么操作了. 网上查了一些方法,大部分都是删除仓库重新上传,这样肯定是不行的,首先不说任务量大,而且删除仓库 ...
- scrapy (一)
scrapy框架 scrapy 是一个爬虫框架,能够高效率,高层次的爬取页面的数据并进行处理. 在scrapy的英文文档中,有这样的一个流程图 scrapy 框架主要分为五大部分,spider, en ...
- Http协议工作特点和工作原理笔记
工作特点: (1)B/S结构(Browser/Server,浏览器/服务器模式) (2)无状态 (3)简单快速.可使用超文本传输协议.灵活运行传输各种类型 工作原理: 客户端发送请求浏览器 -> ...
- [转]RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第一篇【安装】
前言:关于RobotFrameWork+APPIUM实现对安卓APK的自动化测试的文章都是取自于乐于分享知识于网络的好心人们,所以我也希望我的知识可以分享给大家. 首先我们先罗列一下我们要安装的软件 ...
- NO.05--谈一谈Angular 和 Vue.js 的对比。
几天的vue之后,给需要的盆友们带来一篇对比,也算是我近期之内业余时间的大工程,现在开始: Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面.当和其它网络工 ...
- python终端计算器,还有没其他方法?
import sysdef lt(a, b, c ): if b == "+": return int(a)+int(c) elif b == "-": ret ...
- Gradle初使用
我以前一直使用Maven来构建工程,这两天突然发现gradle也非常好用,记录一下自己使用gradle的过程. Gradle的下载与配置 本次选择下载的是gradle3.5版本,没选最新的gradle ...
- 亚马逊中国耳机巨头Jabra官方旗舰店上线
日前,亚马逊中国(Z.cn)宣布,全球无线技术顶级领导品牌 Jabra (捷波朗)官方旗舰店正式上线,产品品类涵盖蓝牙耳机.音乐耳机.无线音箱和车载系列产品.Jabra 旗舰店上线伊始便汇集了 60 ...
- 【探路者】团队中的每一次感动——Alpha版
我是[探路者]团队的leader翟宇豪.在软件工程课程开始时,当听说有团队作业这个任务时,我个人还是对leader这个角色很期待的.我很希望通过自己的努力,让我所在的团队变得更好,让组里的每一个成员在 ...
- KMP---POJ 3461 Oulipo
Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...