使用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中处理字符串之isdigit()方法的使用
May 18 Python
python基于右递归解决八皇后问题的方法
May 25 Python
python 计算文件的md5值实例
Jan 13 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
Python decorator拦截器代码实例解析
Apr 04 Python
pandas抽取行列数据的几种方法
Dec 13 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
Python中使用ipython的详细教程
Jun 22 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在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
用pandas按列合并两个文件的实例
2018/04/12 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
py-charm延长试用期限实例
2019/12/22 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
《太阳》教学反思
2014/02/21 职场文书
快餐公司创业计划书
2014/04/29 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
如何写好竞聘报告
2019/04/03 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Django显示可视化图表的实践
2021/05/10 Python
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS