12306抢票系统无界面版本——(2)获取车票信息

获取车票信息

获取车票信息不需要登录依旧可以获取,但是我们依旧保持cookie来获取车票信息。
首先进入车票预订网站 URL = https://kyfw.12306.cn/otn/leftTicket/init
并打开开发者工具,我们可以发现这里只发送了一个GET请求来获取车票的信息。
这里写图片描述
我们打开Request URL可以看到一大段JSON代码。
这里写图片描述
这里我们可以看出已经获得到了车票的信息。
所以接下来就是得到这段信息。

  1. 获取车站简称
    首先因为发送请求的表单是由站点是由拼音简写构成的,所以我们得先得到所有站点的简写,到时候传参时进行参数替换。

    车站名称对应简写的网站为 url = https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9058
    进去我们可以看到相应的信息
    这里写图片描述
    因此我们做的就是数据取出存为一个字典,代码如下:

import requests



url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9058'

session = requests.Session()

response = session.get(url)

# print(response.text)
dict = {}

# a = input('请输入第一个站点')
# b = input('请输入第二个站点')

s=response.text.replace('var station_names =','')
s=s[1:-2]
s=s.split('@')
# print(s)
for i in s:
    i = i.split("|")
    # print(i)
    # print(len(i))
    if len(i) == 6:
        dict[i[1]] = i[2]

print(dict)

这里便得到了所有的简称
这里写图片描述

  1. 获取车票信息
    得到简码之后我们可以轻松的得到车票的信息了。
    请求的网站为:https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2018-07-27&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=LZJ&purpose_codes=ADULT
    从网站中我们可以看到,网站的组成是由出发地、目的地、时间组成。
fstation=input('请输入你的出发地(例如:北京):\n')
tstation=input('请输入你的目的地(例如:上海):\n')
date=input('请输入你的乘车时间(例如:2018-07-10):\n')

romstation=dict[fstation]
tostation=dict[tstation]

url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date='+date+'&leftTicketDTO.from_station='+fromstation+'&leftTicketDTO.to_station='+tostation+'&purpose_codes=ADULT'
response = requests.get(url)
response.encoding="utf8"
print(response.text)
try:
    dic=json.loads(response.text)
    # print(dic.text)
except:
    print( 'ERROR' )
result= dic['data']['result']
dic={}
for i in result: 
    i=i.split('|')
    print('**********************************************************')
    #显示列车详情
    for key in dict:
        if dict[key]==i[6]:
            fromstation=key
        if dict[key]==i[7]:
            tostation=key
    print('时间:'+i[13],'车次:'+i[3],'出发站-到达站:'+fromstation+'-'+tostation,'出发时间-到达时间:'+i[8]+'-'+i[9],'历时:'+i[10]+'\n')
    print('商务座、特等座:'+(i[32] or "--"),'一等座:'+(i[31] or "--"),'二等座:'+(i[30] or "--"),'软卧:'+(i[23]  or "--"),'硬卧:'+(i[28] or "--"),'硬座:'+(i[29] or "--"),'无座:'+(i[26] or "--"))

这里我们将输入的信息在之前得到的简码中替换传入url中,得到所有的车站信息,我们将得到的str转换为json代码。之后通过分析可以得到其中所有的车票信息。如图所示
这里写图片描述
这样我们就可以根据返回的信息选择相应的车票了。

猜你喜欢

转载自blog.csdn.net/r244925932/article/details/81227873