使用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 相关文章推荐
JPype实现在python中调用JAVA的实例
Jul 19 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
好的Python培训机构应该具备哪些条件
May 23 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
python版本单链表实现代码
Sep 28 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
用python实现监控视频人数统计
May 21 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php Memcache 中实现消息队列
2009/11/24 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python对excel文档的操作方法详解
2018/12/10 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
简单了解Django项目应用创建过程
2020/07/06 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
铭立家具面试题
2012/12/06 面试题
英语自荐信范文
2013/12/11 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
小学生手册家长意见
2015/06/03 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书