获取车票信息
获取车票信息不需要登录依旧可以获取,但是我们依旧保持cookie来获取车票信息。
首先进入车票预订网站 URL = https://kyfw.12306.cn/otn/leftTicket/init
并打开开发者工具,我们可以发现这里只发送了一个GET请求来获取车票的信息。
我们打开Request URL可以看到一大段JSON代码。
这里我们可以看出已经获得到了车票的信息。
所以接下来就是得到这段信息。
获取车站简称
首先因为发送请求的表单是由站点是由拼音简写构成的,所以我们得先得到所有站点的简写,到时候传参时进行参数替换。车站名称对应简写的网站为 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)
这里便得到了所有的简称
- 获取车票信息
得到简码之后我们可以轻松的得到车票的信息了。
请求的网站为: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代码。之后通过分析可以得到其中所有的车票信息。如图所示
这样我们就可以根据返回的信息选择相应的车票了。