使用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爬虫之xlml解析库(全面了解)
Aug 08 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
使用Python操作FTP实现上传和下载的方法
Apr 01 Python
使用python实现滑动验证码功能
Aug 05 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
Python多线程thread及模块使用实例
Apr 28 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python中pyplot基础图标函数整理
Nov 10 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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新手上路(二)
2006/10/09 PHP
PHP 转义使用详解
2013/07/15 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
js实现分割上传大文件
2016/03/09 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python根据文本生成词云图代码实例
2019/11/15 Python
什么是python的列表推导式
2020/05/26 Python
python如何进行矩阵运算
2020/06/05 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
农业项目建议书
2014/08/25 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
升学宴家长答谢词
2015/09/29 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python