使用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制作查询火车票工具的更多相关文章

  1. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

  2. 《零基础学习Python制作ArcGIS自定义工具》课程简介

    Python for ArcGIS Python for ArcGIS是借助Python语言实现ArcGIS自动化行为的综合,它不止是如课程标题所述的“制作ArcGIS自定义工具”,还包括使用Pyth ...

  3. python制作命令行工具——fire

    python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...

  4. 用python制作文件搜索工具,深挖电脑里的【学习大全】

    咳咳~懂得都懂啊 点击此处找管理员小姐姐领取正经资料~ 开发环境 解释器: Python 3.8.8 | Anaconda, Inc. 编辑器: pycharm 专业版 先演示效果 开始代码,先导入模 ...

  5. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

  6. 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理

    小工具:天气查询   开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示.  一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...

  7. Python的包管理工具

    Python的包管理工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么使用包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了. 但是为了 ...

  8. 使用python制作ArcGIS插件(5)其他技巧

    使用python制作ArcGIS插件(5)其他技巧 by 李远祥 使用python做插件开发,除了了解ArcToolBox工具之外,还需要在了解ArcPy的相关函数和接口.只有掌握了这些,才可以顺利的 ...

  9. 使用python制作ArcGIS插件(4)界面交互

    使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

随机推荐

  1. iOS开发 - 多线程实现方案之NSOperation篇

    NSOperation简介 1.实现多线程编程步骤: 配合使用NSOperation和NSOperationQueue实现多线程编程,我们不用考虑线程的生命周期.同步.加锁等问题,如下: 先将需要执行 ...

  2. IP服务-2-RARP和BOOTP

    ARP和代理ARP进程都是在一台主机知道了自己的IP地址和子网掩码后发生的.RARP.BOOTP和DHCP则代表了一类协议的发展,这类协议用来帮助主机动态地学习自己的IP地址.

  3. 自定义收索View

    1 .h文件 @interface SearchNavView : UIView @property (nonatomic, copy) void(^cancleBtnBlock)(void); @p ...

  4. StretchDIBits速度测试(COLORONCOLOR)

    下面是一个测试程序,源码下载

  5. SSAS 维度属性自定义排序

    默认设置: 排序设置:

  6. 让linux下的eclipse支持GBK编码

    原文链接:http://leaze.blog.51cto.com/83088/195584 今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的,而 ...

  7. APP产品体验

    一.前言   1.背景介绍 体验人员:羽珞体验时间:2016.4.12~2016.4.14   2.体验环境 产品名称 产品版本 测试设备 设备系统 易助(ehlep) 1.0 TCL J738M A ...

  8. Java 语言中一个字符占几个字节?

    Java中理论说是一个字符(汉字 字母)占用两个字节. 但是在UTF-8的时候 new String("字").getBytes().length 返回的是3 表示3个字节 作者: ...

  9. Windwos下安装和使用MongoDB

    1)下载安装包下载路径:https://www.mongodb.com/download-center#community包名称:mongodb-win32-x86_64-3.4.10-signed. ...

  10. Grace Huang 2017/1/11

    原文 This actress becomes each character she plays Grace Huang has no interested in doing same thing y ...