使用Python实现火车票查询系统(带界面)攻略
1.需求分析
在开始编写代码前,我们需要对需求进行分析。在本次的火车票查询系统中,主要包含以下几个功能:
- 查询火车票信息
- 筛选火车票信息
- 订票
2.环境设置
在实现火车票查询系统前,我们需要对环境进行设置。通过以下步骤可以完成Python环境安装,以及Tkinter安装:
-
安装Python。从Python官网下载安装包,双击安装,根据提示完成安装步骤。
-
安装Tkinter。使用pip安装:打开终端或命令提示符,输入以下命令:
pip install tk
3.界面设计
我们需要设计一个简介明了的界面来帮助用户使用火车票查询系统。通过以下代码可以创建一个简单的窗口:
import tkinter as tk
window = tk.Tk()
window.title("火车票查询系统")
window.geometry("600x400")
window.mainloop()
通过以上代码,我们可以创建一个大小为600x400像素的窗口,并将窗口命名为"火车票查询系统"。
4.程序设计
在火车票查询系统中,我们需要获取用户输入的起始站和终点站,然后通过爬虫从12306获取信息,并通过筛选后将结果显示出来。通过以下代码,可以实现该过程:
import requests
import json
url = 'https://kyfw.12306.cn/otn/leftTicket/query'
params = {
'leftTicketDTO.train_date': '2022-05-01',
'leftTicketDTO.from_station': 'BJP',
'leftTicketDTO.to_station': 'SHH',
'purpose_codes': 'ADULT'
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
res = requests.get(url, headers=headers, params=params).text
data = json.loads(res)
result = data['data']['result']
print(result) # 打印所有查询结果
在以上代码中,通过requests.get()从12306网站获取数据,并通过json.loads(),将结果转换为python对象。最后,我们可以打印出所有查询结果。
除了火车票信息的查询,我们还需要实现订票的功能。通过以下代码,可以实现该过程:
import requests
import re
url = 'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'
data = {
'secretStr': 'xxx', # 从查询结果中获取的secretStr
'train_date': '2022-05-01',
'back_train_date': '2022-05-01',
'tour_flag': 'dc',
'purpose_codes': 'ADULT',
'query_from_station_name': '北京',
'query_to_station_name': '上海',
'cancel_flag': 2,
'bed_level_order_num': '000000000000000000000000000000',
'passengerTicketStr': 'O,0,1,张三,1XXXXXXXXXXXXXXX,130XXXXXXXX,1,0,' # 订票人信息,需要提前获取
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init'
}
res = requests.post(url, headers=headers, data=data).text
result = re.findall('globalRepeatSubmitToken = \'(.*?)\'', res)
if result:
globalRepeatSubmitToken = result[0] # 获取globalRepeatSubmitToken
print(globalRepeatSubmitToken)
在以上代码中,我们需要从查询结果中获取secretStr,并通过requests.post()方法进行订票。如果订票成功,还可以通过正则表达式获取globalRepeatSubmitToken。
5.功能演示
我们可以通过以下代码,将查询结果展示到图形化界面中:
import tkinter as tk
window = tk.Tk()
window.title("火车票查询系统")
window.geometry("600x400")
label = tk.Label(window, text='火车票查询结果', bg='yellow')
label.pack()
result = ['G101', 'G102', 'G103'] # 火车票查询结果,这里假设查询结果为3条
for i in range(len(result)):
tk.Label(window, text=result[i]).pack()
window.mainloop()
通过设置Label组件,我们可以将查询结果展示出来,方便用户查看。
6.示例说明
假设某用户在火车票查询系统中输入起始站为“北京”、终点站为“上海”,则系统可以返回查询结果,其中第1条结果为“G101”,第2条结果为“G102”和第3条结果为“G103”,如下所示:
火车票查询结果
G101
G102
G103
另外,如果用户进行了订票操作,并成功订票,系统可以返回globalRepeatSubmitToken,以便用户完成支付等后续操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python实现火车票查询系统(带界面) - Python技术站