python查火车票_Python查询火车票(三)

这是一个使用Python实现的火车票查询系统,包括查询车票、解析数据并显示结果等功能。系统通过requests库获取数据,使用Tkinter进行界面展示,并支持多线程查询和购票操作。用户可以输入出发地、目的地、日期、车次等信息,系统会实时显示可用的车票信息。
摘要由CSDN通过智能技术生成

########################################################

# 火车票抢票系统V1.0

########################################################

import requests

import Station_Parse

import threading

import os

from datetime import datetime

from splinter.browser import Browser

from time import sleep

from tkinter import *

from PIL import Image, ImageTk

from tkinter import messagebox

from requests.packages.urllib3.exceptions import InsecureRequestWarning

# 忽视该警告

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

# 车票查询部分

#-------------------------------------------------------------------------------------------------------------------------------------------

# 数据处理+显示

class Trains_Demo():

# 初始化

def __init__(self, txt_show_ticket, raw_trains, option):

self.headers = '车次: 车站: 时间: 历时: 商务/特等座: 一等座: 二等座: 高级软卧: 软卧: 动卧: 硬卧: 软座: 硬座: 无座:'.split()

self.raw_trains = raw_trains

self.option = option

txt_show_ticket.delete(1.0, END)

# 获取出发和到达站

def get_from_to_station_name(self, data_list):

self.from_station_name = data_list[6]

self.to_station_name = data_list[7]

self.from_to_station_name = Station_Parse.parse_station().disparse(self.from_station_name) + '-->' + Station_Parse.parse_station().disparse(self.to_station_name)

return self.from_to_station_name

# 获得出发和到达时间

def get_start_arrive_time(self, data_list):

self.start_arrive_time = data_list[8] + '-->' + data_list[9]

return self.start_arrive_time

# 解析trains数据(与headers依次对应)

def parse_trains_data(self, data_list):

return {

'trips': data_list[3],

'from_to_station_name': self.get_from_to_station_name(data_list),

'start_arrive_time': self.get_start_arrive_time(data_list),

'duration': data_list[10],

'business_premier_seat': data_list[32] or '--',

'first_class_seat': data_list[31] or '--',

'second_class_seat': data_list[30] or '--',

'senior_soft_sleep': data_list[21] or '--',

'soft_sleep': data_list[23] or '--',

'move_sleep': data_list[33] or '--',

'hard_sleep': data_list[28] or '--',

'soft_seat': data_list[24] or '--',

'hard_seat': data_list[29] or '--',

'no_seat': data_list[26] or '--',

}

# 判断是否需要显示

def need_show(self, data_list):

self.trips = data_list[3]

initial = self.trips[0].lower()

if 'a' in self.option:

return self.trips

else:

return(initial in self.option)

# 数据显示

def show_trian_data(self):

self.t_num = 0

for self.train in self.raw_trains:

self.data_list = self.train.split('|')

if self.need_show(self.data_list):

self.values_row = []

self.parsed_train_data = self.parse_trains_data(self.data_list)

self.values_row.append(self.headers[0] + self.parsed_train_data['trips'])

self.values_row.append(self.headers[1] + self.parsed_train_data['from_to_station_name'])

self.values_row.append(self.headers[2] + self.parsed_train_data['start_arrive_time'])

self.values_row.append(self.headers[3] + self.parsed_train_data['duration'])

self.values_row.append(self.headers[4] + self.parsed_train_data['business_premier_seat'])

self.values_row.append(self.headers[5] + self.parsed_train_data['first_class_seat'])

self.values_row.append(self.headers[6] + self.parsed_train_data['second_class_seat'])

self.values_row.append(self.headers[7] + self.parsed_train_data['senior_soft_sleep'])

self.values_row.append(self.headers[8] + self.parsed_train_data['soft_sleep'])

self.values_row.append(self.headers[9] + self.parsed_train_data['move_sleep'])

self.values_row.append(self.headers[10] + self.parsed_train_data['hard_sleep'])

self.values_row.append(self.headers[11] + self.parsed_train_data['soft_seat'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Python编写一个查询火车票信息的工具,具体步骤如下: 1. 导入需要的库,如requests、json、prettytable等。 2. 通过requests库向12306网站发送查询请求,获取查询结果。 3. 解析查询结果,获取需要的信息,如车次、出发站、到达站、出发时间、到达时间、座位类型、价格等。 4. 使用prettytable库将查询结果以表格的形式输出。 下面是一个简单的示例代码: ```python import requests import json from prettytable import PrettyTable def query_train_tickets(): url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2021-12-01&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=NJH&purpose_codes=ADULT' # 发送查询请求,其中leftTicketDTO.train_date为出发日期,leftTicketDTO.from_station为出发站,leftTicketDTO.to_station为到达站,purpose_codes为乘客类型 response = requests.get(url, verify=False) if response.status_code == 200: # 解析查询结果 result = json.loads(response.text) data = result['data']['result'] headers = '车次 出发站 到达站 出发时间 到达时间 商务座 特等座 一等座 二等座 软卧 硬卧 硬座 无座'.split() table = PrettyTable(headers) for item in data: item_list = item.split('|') row = [] row.append(item_list[3]) row.append(item_list[6]) row.append(item_list[7]) row.append(item_list[8]) row.append(item_list[9]) row.append(item_list[32]) row.append(item_list[25]) row.append(item_list[31]) row.append(item_list[30]) row.append(item_list[23]) row.append(item_list[28]) row.append(item_list[29]) row.append(item_list[26]) table.add_row(row) print(table) if __name__ == '__main__': query_train_tickets() ``` 其中,url为查询请求的地址,leftTicketDTO.train_date、leftTicketDTO.from_station、leftTicketDTO.to_station和purpose_codes为查询参数,根据需要修改即可。通过PrettyTable库将查询结果以表格的形式输出,方便看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值