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


Posted in Python onJuly 19, 2018

使用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脚本查询火车票工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
详解Python中time()方法的使用的教程
May 22 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Django开发中复选框用法示例
Mar 20 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
使用python实现简单五子棋游戏
Jun 18 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
python实现黄金分割法的示例代码
Apr 28 Python
python字符串的一些常见实用操作
Apr 06 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 #Python
Flask框架Jinjia模板常用语法总结
Jul 19 #Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 #Python
python代码过长的换行方法
Jul 19 #Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 #Python
python多行字符串拼接使用小括号的方法
Mar 19 #Python
python中的字符串内部换行方法
Jul 19 #Python
You might like
php 获取mysql数据库信息代码
2009/03/12 PHP
PHP SOCKET编程详解
2015/05/22 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
JavaScript简介
2015/02/15 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python编程之多态用法实例详解
2015/05/19 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python 私有化操作实例分析
2019/11/21 Python
使用python模拟高斯分布例子
2019/12/09 Python
python实现批量转换图片为黑白
2020/06/16 Python
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
实习单位接收函
2014/01/11 职场文书
项目建议书范文
2014/05/12 职场文书
安全保证书格式
2015/02/28 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
小学生暑假生活总结
2015/07/13 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python