Python3.3.3+PyQt5.1.1实现火车票查询代码

0 下载量 160 浏览量 更新于2024-08-28 收藏 41KB PDF 举报
"这是一个使用Python3.3.3和PyQt5.1.1库实现的2014年火车票查询程序的代码片段。代码中包含了处理HTTP Cookie、发送GET和POST请求以及解析返回数据的函数,旨在模拟火车票查询接口的交互。" 在该代码中,开发者使用了Python的标准库和第三方库来实现功能,具体知识点包括: 1. **编码声明**:`# -*- coding: utf-8 -*-` 是一个元注释,用于声明源代码的字符编码为UTF-8,确保代码中的中文字符能正确解析。 2. **库导入**: - `sys`: 提供与Python解释器交互的接口。 - `time`: 提供时间相关的函数。 - `re`: 正则表达式模块,用于处理字符串匹配和搜索。 - `urllib.parse`: URL处理模块,用于解析和构建URL。 - `urllib.request`: HTTP请求模块,用于发送HTTP请求。 - `http.cookiejar`: 处理HTTP Cookie的模块,用于保持会话状态。 - `json`: JSON序列化和反序列化的模块,用于处理JSON格式的数据。 - `PyQt5.QtCore`, `PyQt5.QtGui`, `PyQt5.QtWidgets`: PyQt5库的子模块,用于构建图形用户界面(GUI)。 3. **HTTP Cookie管理**: - `cookie=http.cookiejar.LWPCookieJar()`: 创建了一个LWPCookieJar实例,用于存储和管理HTTP Cookie。 - `chandle=urllib.request.HTTPCookieProcessor(cookie)`: 创建了一个HTTPCookieProcessor对象,用于处理Cookie。 - `cookie.load()` 和 `cookie.save()`: 加载和保存Cookie到文件,用于持久化会话。 4. **网络请求**: - `getData(url)`: 发送GET请求的函数,使用`urllib.request.Request`创建请求对象,通过`build_opener`和`open`方法发送请求并获取响应数据。 - `postData(url, data)`: 发送POST请求的函数,将数据编码为字节,然后创建Request对象并发送请求。两个函数都处理了编码问题,以适应不同的字符集。 5. **数据处理**: - `data.decode('utf-8')` 或 `data.decode('gbk', 'ignore')`: 将二进制响应数据解码为字符串,尝试使用UTF-8,如果失败则尝试GBK编码,并忽略可能的错误。 6. **类定义**: - `class Ticket`: 这是一个名为Ticket的类,虽然没有显示完整的类定义,但可以推测它包含与火车票查询相关的属性和方法,如设置查询参数、发送请求和解析结果等。 这个代码示例展示了如何使用Python进行网络请求,特别是处理Cookie以维持会话,以及如何构建简单的GUI应用。虽然代码可能已经过时,但它仍然可以作为学习Python网络编程和GUI设计的一个基础示例。
5262 浏览量
#这只是一个半成品,只是实现了,一个完整的订票过程,对于,如果刷票,自己研究 #简单过程 # 第一、getRandAndCookie() 获得cook 和一个随机数用于登录 # 第二、getEnterRandCode() 得到登录时的识别码 # 第三、setuseandpassword(randcode,use,password) 发送随机数、识别码和用户及密码。由于随机数只在内部使用,所以定义成了全局变量, # 第四、GetTrainList() 得到所有车站列表,'@bjb|北京北|VAP|beijingbei|bjb|0' 其中有中文、拼音、拼音缩写、所一个ID(唯一),其主要是可以,通过上面的列表,找到它的唯一ID,TranCityToId('南昌') # 第五、GetTrainNumList(date,fromstationid,tostationid,starttime) 得到哪到哪的所在车次,消息格式如下,其中所以,一下车次的的ID:"id":"650000K1060I" # {"end_station_name":"北京西","end_time":"16:18","id":"650000K1060I","start_station_name":"深圳","start_time":"10:54","value":"K106"} # 通过ChangeToTrainNumId('K106')得到车次ID # 第六、QueryTrain(fromstationid,tostationid,date,stationNum,starttime) 就是点击查询按键,得到是否有能预订,格式如下 #       南昌         20:12,    北京西        07:38,11:26,--,--,--,--,10,有,有,--,有,有,--,<a name='btn130_2' class='btn130_2' # 通过choiceSubmitNum(stationNum,trainsubmitinfo)提取出getSelected()消息 # 第七、submitRequest(choiceSubmitNum(stationNum,trainsubmitinfo),date,starttime) 就是点击预订按钮 # 第八、getrandCheckCode()得到提交订单的识别码 # 第十、CheckInMyTicket(info,randcode,peoples)点击提交,如果成功的话,就会返回{"errMsg":"Y"} # 出于,网络是UTF8格式,所以,必须# -*- coding: utf-8 -*-,(当然,自己转换也是可以的) # 出于这一个控制台信息,所以,识别码的图片在脚本同一目录 #得到头信息