python 12306查询不到车次_python爬取12306火车车次信息

#-*- 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 评论

留下您的评论.