使用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中的生成器和yield详细介绍
Jan 09 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
浅谈Python单向链表的实现
Dec 24 Python
儿童python练习实例
May 27 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 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中文件上传的安全问题
2006/10/09 PHP
PHP开发文件系统实例讲解
2006/10/09 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jquery获取radio值实例
2014/10/16 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
Python操作json的方法实例分析
2018/12/06 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Python正则表达式学习小例子
2020/03/03 Python
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
运动会口号大全
2014/06/07 职场文书
商务经理岗位职责
2014/07/30 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
Nginx配置https的实现
2021/11/27 Servers