使用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 smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
python实现的希尔排序算法实例
Jul 01 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
python调用staf自动化框架的方法
Dec 26 Python
对django中foreignkey的简单使用详解
Jul 28 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
python爬虫中多线程的使用详解
Sep 23 Python
Python 列表的清空方式
Jan 13 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
python爬取某网站原图作为壁纸
Jun 02 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
python基于turtle绘制几何图形
Jun 15 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空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
js判断某个方法是否存在实例代码
2015/01/10 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
ajax异步请求详解
2017/01/06 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python编程线性回归代码示例
2017/12/07 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
收银员的岗位职责范本
2014/02/04 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Java基础-封装和继承
2021/07/02 Java/Android