#-*- coding:utf-8 -*-
importrequestsimportreimportjson#关闭https证书验证警告
requests.packages.urllib3.disable_warnings()defgetStation():#12306的城市名和城市代码js文件url
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018'r= requests.get(url, verify=False)
pattern= u'([\u4e00-\u9fa5]+)\|([A-Z]+)'result=re.findall(pattern, r.text)
station= dict(result) #所有车站信息
#print(station)
returnstation'''查询两站之间的火车票信息
输入参数:
12306 api:
'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-07-18&leftTicketDTO.from_station=NJH&leftTicketDTO.to_station=SZH&purpose_codes=ADULT''''
#生成查询的url
defget_query_url(text,date,from_station,to_station):#城市名代码查询字典
#key:城市名 value:城市代码
try:
date=date
from_station_name=from_station
to_station_name=to_station
from_station=text[from_station_name]
to_station=text[to_station_name]except:
date, from_station, to_station= '--', '--', '--'
#将城市名转换为城市代码
#api url 构造
url =('https://kyfw.12306.cn/otn/leftTicket/query?'
'leftTicketDTO.train_date={}&'
'leftTicketDTO.from_station={}&'
'leftTicketDTO.to_station={}&'
'purpose_codes=ADULT').format(date, from_station, to_station)returnurl#获取信息
defquery_train_info(url, text):'''查询火车票信息:
返回 信息查询列表'''info_list=[]try:
r= requests.get(url, verify=False)#获取返回的json数据里的data字段的result结果
raw_trains = r.json()['data']['result']for raw_train in raw_trains: #循环遍历每辆车的信息
data_list = raw_train.split('|')
train_no= data_list[3] #车次号码
from_station_code = data_list[6] #出发站
from_station_name = text['北京西']
to_station_code= data_list[7] #终点站
to_station_name = text['亳州']
start_time= data_list[8] #出发时间
arrive_time = data_list[9] #到达时间
time_fucked_up = data_list[10] #行车耗时
first_class_seat = data_list[31] or '--' #一等座
second_class_seat = data_list[30] or '--' #二等座
soft_sleep = data_list[23] or '--' #软卧
hard_sleep = data_list[28] or '--' #硬卧
hard_seat = data_list[29] or '--' #硬座
no_seat = data_list[26] or '--' #无座
#打印查询结果
info =('车次:{}\n出发站:{}\n目的地:{}\n出发时间:{}\n到达时间:{}\n消耗时间:{}\n座位情况:\n 一等座:「{}」 \n二等座:「{}」\n软卧:「{}」\n硬卧:「{}」\n硬座:「{}」\n无座:「{}」\n\n'.format(
train_no, from_station_name, to_station_name, start_time, arrive_time, time_fucked_up, first_class_seat,
second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat))print(info)
info_list.append(info)returninfo_listexcept:return '输出信息有误,请重新输入'text=getStation();
url= get_query_url(text,'2018-12-10','北京西','亳州')
query_train_info(url, text)
本文链接:https://my.lmcjl.com/post/16430.html
4 评论