使用python脚本实现查询火车票工具

作者:白天不懂夜的黑i 时间:2021-03-10 05:48:54 

使用python脚本实现查询火车票信息的效果图如下:

使用python脚本实现查询火车票工具

实现的代码:


# coding: utf-8
"""命令行火车票查看器
Usage:
tickets [-gdtkz]
Options:
-h,--help 显示帮助菜单
-g   高铁
-d   动车
-t   特快
-k   快速
-z   直达
Example:
tickets 北京 上海 2016-10-10
tickets -dg 成都 南京 2016-10-10
"""
import json
import requests
import prettytable
from docopt import docopt
from colorama import init, Fore
class CollectInfo:
def __init__(self):
 self.qurey_ret = []
 self.header = ['车次信息', '发/到时间', '发/到站', '历时', '票价', '余票']
# 获取车次相关的所有信息
def query_html_ret(self, query_args):
 url = 'http://api.12306.com/v1/train/trainInfos?arrStationCode={to_station}&deptDate={date}\
   &deptStationCode={source_station}&findGD=false'.format(to_station=query_args['to_station'],
                 source_station=query_args['source_station'],
                 date=query_args['date'])
 row_ret = requests.get(url)
 return row_ret.json()
# 解析获取到的结果
def paser_ret(self, row_ret):
 trains_info = row_ret['data']['trainInfos']
 for info in trains_info:
  row_info = []
  # 获取车次信息
  row_info.append('\n' + info['trainCode'])
  # 获取车次到站时间信息
  row_info.append('\n' + '\n'.join([Fore.GREEN + info['deptTime']+ Fore.RESET,
           Fore.RED + info['arrTime']+ Fore.RESET]))
  # 获取车次站点名称
  row_info.append('\n' + '\n'.join([Fore.GREEN + info['deptStationName'] + Fore.RESET,
           Fore.RED + info['arrStationName']+ Fore.RESET]))
  # 获取车次到达站点所需时间
  row_info.append('\n' + info['runTime'])
  # 获取票价以及余票信息
  seat_price = []
  seat_num = []
  for seat in info['seatList']:
   seat_price.append(seat['seatName'] + ':' + seat['seatPrice'])
   if int(seat['seatNum']) > 10:
    ticknum = Fore.GREEN + seat['seatNum'] + Fore.RESET
   else:
    ticknum = seat['seatNum']
   seat_num.append(ticknum)
  row_info.append('\n'.join(seat_price))
  row_info.append('\n'.join(seat_num))
  self.qurey_ret.append(row_info)
  self.qurey_ret.append([' ', ' ', ' ', ' ', ' ', ' '])
 return self.qurey_ret
def show_with_table(self):
 ticket_table = prettytable.PrettyTable()
 ticket_table.field_names = self.header
 for row in self.qurey_ret:
  if len(row) == 0:
   continue
  ticket_table.add_row(row)
 return ticket_table
def main():
arguments = docopt(__doc__)
query_args = {}
init()
# 获取所有站点信息(stations.txt信息通过 函数获取)
# https: // kyfw.12306.cn / otn / resources / js / framework / station_name.js?station_version = 1.8971
f = open('stations.txt', 'r')
info = f.read()
stations_info = json.loads(info)
# 从所有站点信息中获取所要查询站点的代码信息
query_args['to_station'] = stations_info[arguments['']]
query_args['source_station'] = stations_info[arguments['']]
query_args['date'] = arguments['']
# 向12306查询,得到跟车次相关的所有信息
collect_train = CollectInfo()
row_ret = collect_train.query_html_ret(query_args)
collect_train.paser_ret(row_ret)
table = collect_train.show_with_table()
print(table)
if __name__ == '__main__':
 main()

总结

以上所述是小编给大家介绍的使用python脚本查询火车票工具网站的支持!

来源:https://www.cnblogs.com/zpzhue/archive/2018/07/19/9336235.html

标签:python,查询,火车票
0
投稿

猜你喜欢

  • 详解Python 实现元胞自动机中的生命游戏(Game of life)

    2023-05-31 07:11:54
  • 手把手带你走进Go语言之常量解析

    2024-05-08 10:44:38
  • django之自定义软删除Model的方法

    2023-11-17 21:31:12
  • Python 虚拟环境的价值和常用命令详解

    2022-01-04 06:02:57
  • MySQL中datetime时间字段的四舍五入操作

    2024-01-28 08:00:40
  • 对跨多个表格的数据组合时需要用到的SQL

    2009-01-06 11:18:00
  • python高级特性和高阶函数及使用详解

    2022-09-17 20:13:50
  • 详细总结Python类的多继承知识

    2021-10-02 03:15:02
  • Security安装 Elastic SIEM 和 EDR的超详细教程

    2022-03-08 19:55:43
  • 详解IDEA git分支回退指定的历史版本

    2022-01-25 16:03:55
  • asp 读取文件和保存文件函数代码

    2011-04-04 11:17:00
  • MYSQL启用日志和查看日志

    2010-12-03 16:24:00
  • 详解Bagging算法的原理及Python实现

    2021-06-10 00:20:41
  • python opencv 图像尺寸变换方法

    2023-09-27 20:33:03
  • 详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始

    2024-01-13 05:43:07
  • Python Matplotlib绘制箱线图boxplot()函数详解

    2021-03-09 11:16:07
  • python实现加密的方式总结

    2023-08-28 05:36:58
  • Python loguru日志库之高效输出控制台日志和日志记录

    2023-07-20 04:15:04
  • 客户体验

    2008-12-11 13:58:00
  • MySQL 开窗函数

    2024-01-15 11:06:24
  • asp之家 网络编程 m.aspxhome.com