使用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调用windows api锁定计算机示例
Apr 17 Python
python实现超简单端口转发的方法
Mar 13 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
Python读取指定日期邮件的实例
Feb 01 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 Python
浅谈Python数学建模之固定费用问题
Jun 23 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
我的javascript 函数链之演变
2011/04/07 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
Python中类型检查的详细介绍
2017/02/13 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
python 6行代码制作月历生成器
2020/09/18 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
学生干部学习的自我评价
2014/02/18 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
亲子活动总结
2014/04/26 职场文书
银行求职信
2014/05/31 职场文书
安全宣传标语口号
2014/06/06 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2014年底个人工作总结
2015/03/10 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript