python编写12306窗体抢票软件(三)

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会给你返回所有的车次信息,
在这里插入图片描述
在这里插入图片描述
这个太长了,截不全,但是能够看到里面有下图的所有信息了。
在这里插入图片描述
这样 我们就抓取到了所有的车次信息。

下次再讲怎么去根据这个车次信息去提交订单吧~欢迎底下评论哈

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值