12306 查询列车

查票

请求查询 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容