使用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实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python删除windows垃圾文件的方法
Jul 14 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
Python查看微信撤回消息代码
Jun 07 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
python实现连连看辅助(图像识别)
Mar 25 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Django之腾讯云短信的实现
Jun 12 Python
Python获取excel内容及相关操作代码实例
Aug 10 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
Javascript this 的一些学习总结
2012/08/02 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
keras输出预测值和真实值方式
2020/06/27 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
韩国11街:11STREET
2018/03/27 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
2014年协会工作总结
2014/11/22 职场文书
2014年村官工作总结
2014/11/24 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android