使用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调用fortran模块
Apr 08 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
python去除扩展名的实例讲解
Apr 23 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python实现生活常识解答机器人
Jun 28 Python
Python 中的 copy()和deepcopy()
Nov 07 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 Memcached应用实现代码
2010/02/08 PHP
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
详解jquery和vue对比
2019/04/16 jQuery
vue 动态表单开发方法案例详解
2019/12/02 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
Python 多线程实例详解
2017/03/25 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python3实现随机数
2018/06/25 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
python字典的常用方法总结
2019/07/31 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
python可视化实现KNN算法
2019/10/16 Python
Python sorted排序方法如何实现
2020/03/31 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
生物技术研究生自荐信
2013/11/12 职场文书
银行职业规划书范文
2013/12/28 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
《我是什么》教学反思
2016/02/16 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书