python火车票余票查询(ticketapi)

这段代码演示了如何利用Python的requests库查询12306网站上的火车票余票信息。通过定义query()、analyze()和get_price()函数,分别实现了获取原始车票信息、解析车票详情以及获取票价信息的功能。程序还包含了错误处理和信息展示的部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import tkinter.messagebox as messagebox
import requests
import sys
from stationapi import url_leftTicket

#得出原始车票信息
def query(condition): 
    url = 'https://kyfw.12306.cn/otn/{}?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(url_leftTicket [0],condition[0], condition[1], condition[2])
    print(url)
    try:
        tickethtml = requests.get(url,verify=False)
        ticket_list = tickethtml.json()['data']['result']
    except:
        messagebox.showinfo('连接故障','网络连接不稳定,请稍后再试!')
        sys.exit()

    return ticket_list 
        
#得出分析后的车票信息        
def analyze(ticket_list,stations):
    tickets = []
    for t in ticket_list:
        ta = t.split('|')
        if ta[0] == "null":
            continue
        train_no = ta[2]
        checi = ta[3]
        shifazhan = ta[4]
        zhongdian = ta[5]
        chufazhan = ta[6]
        daodazhan = ta[7]
        chufashijian = ta[8]
        daodashijian = ta[9]
        lishi = ta[10]
        train_date = ta[13]
        from_station_no = ta[16]
        to_station_no = ta[17]
        gaojiruanwo = ta[21]
        ruanwo = ta[23]
        wuzuo = ta[26]
        yingwo = ta[28]
        yingzuo = ta[29]
        erdengzuo = ta[30]
        yidengzuo = ta[31]
        shangwuzuo = ta[25] or ta[32]
        dongwo = ta[33]
        seat_types = ta[35]
        station = '-'.join([stations[chufazhan][1], stations[daodazhan][1]])
        qtime = '-'.join([chufashijian, daodashijian])
        tickets.append([checi,station,qtime,lishi,shangwuzuo,yidengzuo,erdengzuo,ruanwo,dongwo,yingwo,yingzuo,wuzuo,train_no,train_date,from_station_no,to_station_no,seat_types])
    return tickets
    
#获取票价信息
def get_price(ticket):
    tlen = 13
    price = ['' for n in range(tlen)]
    d = ticket[14][:4]+'-'+ticket[14][4:6]+'-'+ticket[14][6:]
    url = 'https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no={}&from_station_no={}&to_station_no={}&seat_types={}&train_date={}'.format(ticket[13],ticket[15],ticket[16],ticket[17],d)
    #print(url)
    ps = requests.get(url,verify=False)
    try:
        pd = ps.json()["data"]
        #高铁
        if ticket[1].startswith('G'):
            if ("O" in pd.keys()):
                price[7] = pd["O"]
            if ("A9" in pd.keys()):
                price[5] = pd["A9"]
            if ("P" in pd.keys()):
                price[5] = pd["P"]
            if ("M" in pd.keys()):
                price[6] = pd["M"]
        #动车
        elif ticket[1].startswith('D'):
            if ("A4" in pd.keys()):
                price[8] = pd["A4"]
            if ("F" in pd.keys()):
                price[9] = pd["F"]
            if ("O" in pd.keys()):
                price[7] = pd["O"]
            if ("WZ" in pd.keys()):
                price[12] = pd["WZ"]
            if ("M" in pd.keys()):
                price[6] = pd["M"]
        #Z K T
        else:
            if ("A4" in pd.keys()):
                price[8] = pd["A4"]
            if ("A3" in pd.keys()):
                price[10] = pd["A3"]
            if ("A1" in pd.keys()):
                price[11] = pd["A1"]
            if ("WZ" in pd.keys()):
                price[12] = pd["WZ"]
    except:
        return price
    return price

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值