python编写12306窗体抢票软件
都快忘了写后面的了,这次写下怎么获取车站信息,查询车次~
1 车站信息获取
我们可以先模拟购票下,看下每一步,我们发出的访问是什么,12306给我们回复的是什么,比如我们查下北京到运城的车次有哪些。如下图,我们发出的请求有出发日期,还有
from_station 和to_station,很明显是出发站和终点站,但它后面跟的BJP 和 YNV,应该代表的是北京站和运城站了,所以所有的车站名称应该都是编号了,利用这个编号去检索车站,我们可以访问下这个链接,https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?
你就会看到满屏幕的车站名和编号。
访问完后,如图
所以我们把这页所有的复制下,单独保存成一个文件,我们去调用它。
我程序中取名是station_names,
定义一个字典,city ,去解析这个文件,它每一个车站间都是用‘@’分隔开的,里面的编号又是用‘|’分隔的,代码如下,这样就把编号都放到city里了。
city = {}
for i in station_names.split('@'):
if i:
city[i.split('|')[1]] = i.split('|')[2]
2 查询车次
同样还是上面那个图,我们发出去的请求里面包含的数据有时间和始发站还有乘客类型,所以,我们按照这个格式来就可以查到我们想要的车次了。
def SearchTickets(self, train_date, from_station, to_station):
response = req.get('https://kyfw.12306.cn/otn/leftTicket/queryX?'
'leftTicketDTO.train_date={}'
'&leftTicketDTO.from_station={}'
'&leftTicketDTO.to_station={}'
'&purpose_codes=ADULT'.format(train_date, from_station, to_station)) # 0X00是学生票
result=response.json()
global trainNameList,train_locationList, train_no_List, fromStation, Informationlist,secretStrList,left_ticketsList
global fromstationList,tostationList
secretStrList = [] #车次预定序列号
trainNameList = [] #车名
train_locationList = []
train_no_List = []
left_ticketsList = []
fromstationList = []
tostationList = []
for content in result['data']['result']:
Informationlist = content.split('|')
secretStrList.append(Informationlist[0])
trainNameList.append(Informationlist[3])
train_locationList.append(Informationlist[15])
train_no_List.append(Informationlist[2])
fromstationList.append(Informationlist[6])
tostationList.append(Informationlist[7])
fromStation = Informationlist[4]
left_ticketsList.append(Informationlist[12])
return result
可以看到我这里面解析了好多数据,因为你查询完后,12306会给你返回所有的车次信息,
这个太长了,截不全,但是能够看到里面有下图的所有信息了。
这样 我们就抓取到了所有的车次信息。
下次再讲怎么去根据这个车次信息去提交订单吧~欢迎底下评论哈