查票
请求查询 url 。拿到后面提交订单时所需要的 参数 。
- 拿到出发站台的代码,建议用字典形式新建另外文件,方便取所需站台代码,后面无需再次请求站台代码页面。
#获取站台的前的代号
url='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9094'
response = self.session.get(url=url, headers=headers)
#以字典方式来存储站台
content = response.text.split('@')
for info in content[1:]:
context = info.split('|')
self.code[context[1]] = context[2]
- 获取出发时的信息,为了方便也可以将所需要的信息卸载前面的 getData1 中。
# 获取出发时间,出发站台,到达站台。为了方便也可以将所需要的信息卸载前面的 getData1 中。
getData1['train_date'] = input('请输入出发时间[2019-3-10]')
# 查询出发时间格式为 2019-3-10
getData1['from_station'] = input('请输入出发站台')
getData1['to_station'] = input('请输入到达站台')
- 查询列车信息。因为是 get 请求,所以我们将请求的 data 格式化加入到 url 中。
#查询列车信息。因为是 get 请求,所以我们将请求的 data 格式化加入到url 中。
url = 'https://kyfw.12306.cn/otn/leftTicket/queryX?'
#将出发时间 出发站台 到达站台 数据发送查找火车票
data = {
'leftTicketDTO.train_date':getData1['train_date'],
'leftTicketDTO.from_station': code[getData1['from_station']],#获取出发站台的代码
'leftTicketDTO.to_station': code[getData1['to_station']],#获取到达站台的代码
'purpose_codes': 'ADULT'}#purpose_codes ADULT -- 普通 0X00 -- 学生
# 将 data 格式化
data = urllib.parse.urlencode(data)
#数据拼接 url = url + data
response = self.session.get(url=url, headers= headers)
#将请求到的列车信息为 Json 格式,所以解析返回的信息
content = loads(response.content)
- 将获取到的信息处理并显示出来。
if content['data']['result'] == '':
print('未查找到该车次')
return
#将信息打印出来
print('|车次|出发时间|到达时间|历时|出发日|特等座|一等座|二等座|高级动卧|软卧|动卧|硬卧|硬座|无座|')
for str in content['data']['result']:
str = str.split('|预订|')
string = str[1].split('|')
#获取列车的型号
c = string[33]
# 将后面需要使用的 secretStr 存储起来。按照 车次:secretStr 字典形式存储
self.secretStr[string[1]] = str[0]
# 将后面需要使用的 train_no 存储起来。按照 车次:train_no 字典形式存储
self.train_no[string[1]] = string[0]
# 将后面需要使用的 leftTicket 存储起来。按照 车次:leftTicket 字典形式存储
self.leftTicket[string[1]] = string[10]
# 将后面需要使用的 train_location 存储起来。按照 车次:train_location 字典形式存储
self.train_location[string[1]] = string[13]
# K T Z 列车信息
if c == '1413':
#print('|软卧|硬卧|硬座|无座|')
print('|%s| %s | %s |%s|%s| | | | | %s | | %s | %s | %s |'(string[1],string[6],string[7],string[8],string[11],string[21],string[26],string[27],string[24]))
# D 列车信息
elif c == 'OMO' or c == 'OOM':
#print('|一等座|二等座|无座|')
print('|%s| %s | %s |%s|%s| | %s | %s | | | | | | %s |'(string[1],string[6],string[7],string[8],string[11],string[29],string[28],string[24]))
# D 特殊列车信息
elif c == 'OFAO':
#print('高级动卧|动卧|二等座|无座|)
print('|%s| %s | %s |%s|%s| | | %s | %s | | %s | | | %s |'(string[1],string[6],string[7],string[8],string[11],string[28],string[19],string[31],string[24]))
# G 列车信息
elif c == 'OM9':
#print('|特等座|一等座|二等座|')
print('|%s| %s | %s |%s|%s| %s | %s | %s | | | | | |
|'(string[1],string[6],string[7],string[8],string[11],string[30],string[29],string[28]))
- 获取需购买的列车号
# getData2['train_station'] 为需购买的列车号,如不想麻烦可以注释掉只需要在前面的 getData3 修改即可
getData2['train_station'] = input('请输入需要购买的列车号')
- 查看列车经过站台。post 请求需提交 train_no,始发地,到达地,出发时间。(可以不用这一步,因为和购票没有关系)
# 查看列车经过的站台
url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?'
data =
{
'train_no': self.train_no[string[1]],#拿到在刚刚查询列车时拿到的列车号
'from_station_telecode': string[2],#事发地代号
'to_station_telecode': string[3],#到达地代号
'depart_date': string[11][:4] + "-" + string[11][4:6] + "-" + string[11][6:8]#出发时间
}
# 将data转码
data = urllib.parse.urlencode(data)
# 拼接
urlurl = url + data
response = self.session.get(url=url, headers=headers)
content = loads(response.content)
context = content['data']['data']
print('|站序| 站名 |到站时间|出发时间|停留时间|')
for info in context:
print('| %s |%s| %s | %s |%s|'%(info['station_no'],info['station_name'],
info['arrive_time'], info['start_time'],info['stopover_time']))
查询列车信息就完成了,在这里主要的功能就是拿到后面需要提交订单时所需要的信息
github(https://github.com/Tedgar156/12306/tree/master)
如果觉得有用请点一下 star