12306余票查询

一直想做这么一个项目,但是之前一直打不开12306返回信息网页的页面,后来才发现是因为没有加上请求头。12306一旦发现你不是浏览器,就不会返回页面。但是请求方式还是get,加个请求头伪造成浏览器就行了。另外车站代码与车站名称的关联就不多加叙述了。
此外还碰到许多问题,比如colorama模块显示不了颜色、返回的车站信息还有停运车次的。
下面是码源,初学python,写法粗糙,还请大家指正。

from tkinter import *
from prettytable import PrettyTable
from tkinter import scrolledtext
from colorama import Back,Fore,Style#用不了!!QAQ
import requests,re
import tkinter.messagebox
From_station =[]
To_station = []
Time = []
dict_station = {}
dict1 = {}
table = PrettyTable(['Trips','departure time/Time of arrival','Business seat','First-class seat','Second class','Senior soft sleeper','First-sleeper','hard sleeper','hard seat','no-seat'])
url = ' https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'
headers = {'Host':'kyfw.12306.cn','Connection':'keep-alive','User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15','Cookie':'JSESSIONID=94BF6626E334C88E7721315F29F0FCB8; _jc_save_fromDate=2020-03-17; _jc_save_fromStation=%u957F%u6C99%u5357%2CCWQ; _jc_save_toDate=2020-03-10; _jc_save_toStation=%u90D1%u5DDE%u4E1C%2CZAF; _jc_save_wfdc_flag=dc; route=c5c62a339e7744272a54643b3be5bf64; BIGipServerotn=284164618.24610.0000; BIGipServerpool_passport=283968010.50215.0000; RAIL_DEVICEID=qj0QrUHQL56afSGSRIRfreY1nMj6oGTs0_BUW4IzhQc1lSQLE92lBPcPBmOmo3Tfmb1f0PWBPoB2shMe-r47-kDkgX7ZuS30xtmZlD-6dM2izNvpfaQXetF0W8UkVAn_vBgPhFhd00FeLgvuZXT9V5AJRz-_zV3K; RAIL_EXPIRATION=1584003782555',}def window1():def station(sta):def check():url = ' https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9141'response = requests.get(url)response.encoding = 'utf-8'html = response.textreg = r'([\u4e00-\u9fa5]+)\|([A-Z]+)'  # 正则提取汉子和大写字母result = re.findall(reg, html)return resultfor station in check():dict_station[station[0]] = station[1]return dict_station['%s' % sta]def help():tkinter.messagebox.showinfo('帮助','时间格式形如2020-03-20')def dataprepare():def getdata():time = entry1.get()from_station_1 = entry2.get()from_station = station(from_station_1)to_station_1 = entry3.get()to_station = station(to_station_1)Time.append(time)From_station.append(from_station_1)To_station.append(to_station_1)response = requests.get(url % (time, from_station, to_station), headers=headers)html = response.json()return html['data']['result']for i in getdata():tem_list = i.split('|')dict1['a'] = tem_list[3]dict1['b'] = tem_list[8] + '\n' + tem_list[9]if tem_list[23] != '无' and tem_list[23] != '':dict1['g'] = 'Have Tickets'else:dict1['g'] = '--'if tem_list[28] != '无' and tem_list[28] != '':dict1['h'] = 'Have Tickets'else:dict1['h'] = '--'if tem_list[26] != '无' and tem_list[26] != '':dict1['j'] = 'Have Tickets'else:dict1['j'] = '--'if tem_list[21] != '无' and tem_list[21] != '':dict1['f'] = 'Have Tickets'else:dict1['f'] = '--'if tem_list[29] != '无' and tem_list[29] != '':dict1['i'] = 'Have Tickets'else:dict1['i'] = '--'if tem_list[30] != '无' and tem_list[30] != '':dict1['e'] = 'Have Tickets'else:dict1['e'] = '--'if tem_list[31] != '无' and tem_list[31] != '':dict1['d'] = 'Have Tickets'else:dict1['d'] = '--'if tem_list[32] != '无' and tem_list[32] != '':dict1['c'] = 'Have Tickets'else:dict1['c'] = '--'table.add_row([dict1['a'], dict1['b'], dict1['c'], dict1['d'], dict1['e'], dict1['f'], dict1['g'], dict1['h'],dict1['i'],dict1['j']])del dict1['a'], dict1['b'], dict1['c'], dict1['d'], dict1['e'], dict1['f'], dict1['g'], dict1['h'], dict1['i'],dict1['j']quitmywindow()def quitmywindow():myWindow1.destroy()window2()myWindow1 = Tk()Label(myWindow1,text='请输入您的出发日期').grid(row=0,column=0)Label(myWindow1,text='请输入您的出发地').grid(row=1,column=0)Label(myWindow1,text='请输入您的目的地').grid(row=2, column=0)entry1 = Entry(myWindow1)entry1.grid(row=0,column=1)entry2 = Entry(myWindow1)entry2.grid(row=1,column=1)entry3 = Entry(myWindow1)entry3.grid(row=2,column=1)Button(myWindow1, text='退出', command=myWindow1.quit, width=10).grid(row=0, column=2, sticky=W, padx=5, pady=5)Button(myWindow1, text='帮助',command=help, width=10).grid(row=1, column=2, sticky=W, padx=5, pady=5)Button(myWindow1, text='确定',command=dataprepare ,width=10).grid(row=2, column=2, sticky=W, padx=5, pady=5)myWindow1.mainloop()
def window2():# 初始化Tk()myWindow1 = Tk()myWindow1.geometry('1500x800')# 设置标题myWindow1.title('余票查询')# 标签控件布局# Entry控件布局text1 = scrolledtext.ScrolledText(myWindow1,width=178,height=60)text1.grid(row=0, column=0)text1.insert(INSERT,table)text2 = scrolledtext.ScrolledText(myWindow1,height=60,width=20)text2.grid(row=0,column=1)text2.insert(INSERT,'出发时间:%s\n出发地:%s\n目的地:%s\n\n\n'%(Time[0],From_station[0],To_station[0]))text2.insert(INSERT,'温馨提示:为了保证准确性,请忽略进站时间与到达时间均为24:00的车次。\n\n\n车次:\nTrips\n软卧一等卧:\nFirst-sleeper\n硬卧二等卧:\nhard sleeper\n无座:\nno-seat\n高级软卧:\nSenior soft sleeper\n硬座:\nhard seat\n二等座包座:\nSecond class\n商务座:\nBusiness seat\n一等座:\nFirst-class seat\n')Button(myWindow1, text='退出', command=myWindow1.quit, width=20).grid(row=3, column=0, sticky=W, padx=5, pady=5)myWindow1.mainloop()
window1()

这里附上效果图:

2020-03-10相关推荐

  1. 2020 年 10 月程序员工资统计,终于涨了!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:blog.csdn.net/juwikuang/a ...

  2. 2020年10月份电脑选购计划

    2020年10月份电脑选购计划 前言 最近我爸需要买电脑,需要一台笔记本电脑.两台设计师电脑.两台办公电脑.没有说预算. 目测一下笔记本电脑以便携性为主,以超级本为选用方向:办公电脑的要求就是显示好和 ...

  3. 奥利给!2020年10月程序员工资最新统计,涨了!!!

    01 #平均工资统计 2020年10月全国招收程序员362409人.2020年10月全国程序员平均工资14459元,工资中位数12500元,其中95%的人的工资介于5250元到35000元. 工资与上 ...

  4. 2020.03.18模拟赛17(第二题)

    2.[GDKOI训练]音乐节拍(mnotes) 题目描述 FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000)种音节组成,编号为1到N,而且一定按照从1到N的顺序进行弹奏, ...

  5. 2020.03.18模拟赛17(第三题)

    3.[GDKOI训练]电视游戏问题(vidgame) 题目描述 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶教授的做法拿她们去电击戒瘾的,可是后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是 ...

  6. 【财经期刊FM-Radio|2020年10月27日】

    [财经期刊FM-Radio|2020年10月27日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 美股创两个月最大跌幅,欧股一个月新低,中概电商股优于大盘,美债两周最大涨幅. 美国 ...

  7. 2020年10月汽车行业网络关注度分析月度报告

    本报告对2020年10月汽车行业热点事件.各汽车厂商.在售车型.新上市车型.即将上市车型等从数据角度进行梳理和分析.根据数据统计,在10月,特斯拉依旧是最受网络舆论关注的车企:丰田卡罗拉.哈弗H6.长 ...

  8. k8s 自定义dns_K8S 生态周报| Docker v19.03.10 正式发布

    「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息.欢迎订阅知乎专栏「k8s生态」. Node Exporter v1.0.0 正式发布 Prometheus 是最 ...

  9. python现在第几版-2020 年10月编程语言排行榜,Python 排名逼近第二

    原标题:2020 年10月编程语言排行榜,Python 排名逼近第二 来源:菜鸟教程 TIOBE 2020 年 10 月份的编程语言排行榜已经公布,官方的标题是: Python 排名逼近第二. TIO ...

  10. 微软正式发布Windows 10 2020年10月更新

    让大家等待多时的Windows 10 2020年10月更新终于来了,这也是今年微软为Win10准备的最后一个重大更新. Windows 10 2020年10月更新就是之前多次说道的Windows 10 ...

最新文章

  1. flask 控制台输出到文件
  2. 聚类分析基础知识总结及实战解析
  3. a股用计算机模拟走势,咬牙跺脚!A股牛市不改的铁证!
  4. anki vector robot入门语音指令大全
  5. sass笔记-1|Sass是如何帮你又快又好地搞定CSS的
  6. 9、从命令行运行postman脚本及生成测试报告
  7. 零跑汽车上半年表现亮眼,全域自研能力加持下业绩高速增长
  8. 适合学生党上手测试的免费云服务器推荐
  9. Spring常见问题解决 - Required request body is missing
  10. 机械革命电脑MyApp安装包
  11. Wiradius计费系统功能说明
  12. 大数据bi工具有哪些
  13. python输入两个操作数和一个操作符_Python基础学习笔记贰
  14. 离散数学学习笔记-01-随机试验与随机事件
  15. 宇视科技实习生笔试面试经历
  16. 【webpack5】webpack-dev-server 热更新不能自动刷新浏览器
  17. 【一个故事讲完https】聊聊https的诞生
  18. MySQL下载和安装(Windows)
  19. 9、RH850 SPI(CSIH) 通讯功能和配置
  20. Android ToggleButton 实践

热门文章

  1. 如何查找【期刊】IEEE transaction on XXX 相关论文
  2. 关于98% after emitting CopyPlugin个人探索
  3. Linux的任督二脉之内存管理线上微信群直播报名(2018.1.29-2.2)
  4. 此计算机未运行正版windows,最近一开机就有以下之警告:此Windows副本未通过正版Windows验证。...
  5. 2个鸡蛋,100层楼问题;
  6. iOS UIcollectionview 数据量少时候bounces无效的解决方法
  7. 2019测试工程师面试题
  8. IT运维如何应对SOX挑战?
  9. 8.4|Crypto Tech Night 第十六期:深入探索DeFi的“代码世界”
  10. mysql url查找_Superl-url:一款开源、强大的关键词URL采集工具