使用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使用Tkinter显示网络图片的方法
Apr 24 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
Django后台获取前端post上传的文件方法
May 28 Python
在Python中使用gRPC的方法示例
Aug 08 Python
python实现桌面壁纸切换功能
Jan 21 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
jupyter notebook 添加kernel permission denied的操作
Apr 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
php中curl和file_get_content的区别
2014/05/10 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
Python模块的制作方法实例分析
2019/12/21 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
职称自我鉴定
2013/10/15 职场文书
小学教师的个人自我鉴定
2013/10/24 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
小学生环保倡议书
2014/05/15 职场文书
领导欢迎词致辞
2015/01/23 职场文书
国庆节新闻稿
2015/07/17 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记