使用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实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python 多线程Threading初学教程
Aug 22 Python
python如何在列表、字典中筛选数据
Mar 19 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
python图片二值化提高识别率代码实例
Aug 24 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
Python StringIO如何在内存中读写str
Jan 07 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Pycharm安装并配置jupyter notebook的实现
May 18 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+mysql)
2007/11/23 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP _construct()函数讲解
2019/02/03 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JS之相等操作符详解
2016/09/13 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
详解vue-router基本使用
2017/04/18 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python回调函数用法实例详解
2015/07/02 Python
Python网络编程详解
2017/10/31 Python
django2 快速安装指南分享
2018/01/05 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
自我鉴定四大框架
2014/01/17 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
python爬虫--selenium模块
2021/03/31 Python
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
mysql 带多个条件的查询方式
2021/06/05 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android