使用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描述器descriptor详解
Feb 03 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python读取文本绘制动态速度曲线
Jun 21 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
简单介绍python封装的基本知识
Aug 10 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
Python发送邮件封装实现过程详解
May 09 Python
python中关于数据类型的学习笔记
Jul 19 Python
Python数据处理的三个实用技巧分享
Apr 01 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函数实现判断是否移动端访问
2015/03/03 PHP
php格式文件打开的四种方法
2018/02/24 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
jquery 插件开发备注
2010/08/27 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
原生js调用json方法总结
2018/02/22 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
python实现根据文件格式分类
2019/10/31 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
幼儿园秋游活动方案
2014/01/21 职场文书
高中生的自我评价
2014/03/04 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2015年党建工作总结
2015/03/30 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
对公司的意见和建议
2015/06/04 职场文书
感谢师恩主题班会
2015/08/17 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript