使用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代码嵌入C++程序进行编写的实例
Jul 31 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
python list格式数据excel导出方法
Oct 31 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Python如何进行时间处理
Aug 06 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
Django扫码抽奖平台的配置过程详解
Jan 14 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
浅析Python中字符串的intern机制
2020/10/03 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
adidas泰国官网:adidas TH
2020/07/11 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
供货协议书
2014/04/22 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
任命书模板
2014/06/04 职场文书
大明湖导游词
2015/02/03 职场文书
代理词怎么写
2015/05/25 职场文书
入党群众意见范文
2015/06/02 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
python实现剪贴板的操作
2021/07/01 Python