使用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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
python实现socket客户端和服务端简单示例
Feb 24 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
python中append实例用法总结
Jul 30 Python
通过python3实现投票功能代码实例
Sep 26 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
python文件和文件夹复制函数
Feb 07 Python
pycharm全局搜索的具体步骤
Jul 28 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的正则处理函数总结分析
2008/06/20 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
shell的种类有哪些
2015/04/15 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
企业演讲稿范文
2013/12/28 职场文书
《我的信念》教学反思
2014/02/15 职场文书
建设工地安全标语
2014/06/07 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL