使用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的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
用python实现刷点击率的示例代码
Feb 21 Python
Puppeteer使用示例详解
Jun 20 Python
python tkinter窗口最大化的实现
Jul 15 Python
django表单的Widgets使用详解
Jul 22 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python绘制云雨图raincloud plot
Aug 05 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
PHP重载基础知识回顾
2020/09/10 PHP
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
python使用nntp读取新闻组内容的方法
2015/05/08 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
基于python实现删除指定文件类型
2020/07/21 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
习总书记三严三实学习心得体会
2014/10/13 职场文书
2014年学生会工作总结
2014/11/07 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL