#!/usr/bin/env python3

"""

Train tickets query via command-line

Usage:

tickets [-gdtkz]

Options:

-h, --help 显示帮助菜单

-g 高铁

-d 动车

-t 特快

-k 快速

-z 直达

Example:

tickets beijing shanghai 2016-08-25

"""

from docopt import docopt

import re

import requests

from prettytable import PrettyTable

class TrainCollection(object):

# 显示车次、出发/到达站、出发/到达时间、历时、一等座、二等座、软卧、硬卧、硬座

header = 'train station time duration first second softsleep hardsleep hardsit'.split()

def __init__(self, rows):

self.rows = rows

def _get_duration(self, row):

#获取车次运行时间

duration = row.get('lishi').replace(':', 'h') + 'm'

if duration.startswith('00'):

return duration[4:]

if duration.startswith('0'):

return duration[1:]

return duration

@property

def trains(self):

for row in self.rows:

train = [

#车次

row['station_train_code'],

#出发站

'\n'.join([row['from_station_name'], row['to_station_name']]),

#出发、到达时间

'\n'.join([row['start_time'], row['arrive_time']]),

#历时

self._get_duration(row),

#一等座

row['zy_num'],

#二等座

row['ze_num'],

#软卧

row['rw_num'],

#软座

row['yw_num'],

#硬座

row['yz_num']

]

yield train

def pretty_print(self):

'''

数据已经获取到了,剩下的就是提取我们要的信息并将它显示出来

prettytable这个库可以让我们像MySQL数据库那样格式化显示数据

'''

pt = PrettyTable()

#设置每一列的标题

pt._set_field_names(self.header)

for train in self.trains:

pt.add_row(train)

print(pt)

#get stations

url = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955"

r = requests.get(url, verify=False)

stations = re.findall(r'([A-Z]+)\|([a-z]+)', r.text)

stations = dict(stations)

stations = dict(zip(stations.values(), stations.keys()))

#main func

def cli():

'''

command-line interface

'''

arguments = docopt(__doc__)

from_station = stations.get(arguments[''])

to_station = stations.get(arguments[''])

date = arguments['']

#print(arguments)

#构建URL

url = 'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate={}&from_station={}&to_station={}'\

.format(date, from_station, to_station)

r = requests.get(url, verify=False)

rows = r.json()['data']['datas']

trains = TrainCollection(rows)

trains.pretty_print()

if __name__ == "__main__":

cli()

用python判断火车票座位_Python3 实现火车票查询工具相关推荐

  1. python判断火车票座位_Python3 实现火车票查询工具

    首先,感谢实验楼的平台.为我们这些小白提供了学习的平台.其次针对这个项目来说的话,其实算是思路比较简单的.无非就是查询然后展示.不过里面涉及到的东西是很多的,比如编码的转换.类和函数.yeilde.. ...

  2. python判断火车票座位代码_12306 火车票监控Python代码

    import urllib.request as request import http.cookiejar as cookiejar import re import os import smtpl ...

  3. python判断火车票座位代码_Python火车票代码

    前言:我想在源文章里加入下面一段来着,但是实在加不上,报什么405,造成安全威胁,不好意思哈各位,这么点内容还另起一章实在不好意思哈. 千万别一直挂着会封ip的,别问我怎么知道的,我不想说T_T 代码 ...

  4. python 之 Qt Designer 高铁火车票查询工具

    一.制作UI界面 创建一个widget,从Widget Box工具箱中拖拽3个label.3个line Edit.1个Push Button.1个tableWidget.修改控件名后效果如下图,保存并 ...

  5. 基于 Python 的 tkinter 模块制作的名人名言查询工具

    简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  6. 判断火车票座位-Python123编程题库答案-Python从入门到精通挑战台

    判断火车票座位 类型:流程控制‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪ ...

  7. python判断火车票座位号分布图_火车票座位号分布图图解(是否靠窗)

    你知道你买到的硬座火车票是坐哪个位置的吗?小编收集了一个让你一目了然的图,揭露了火车票座位的秘密,让你知道你的车票座位号码是靠窗的还是靠近过道的,还是三人座位被夹在中间的! 火车靠窗座位号分布图 乘坐 ...

  8. python实现火车票查询_Python3 实现火车票查询工具

    项目简介:使用 Python3 抓取 12306 网站信息提供一个命令行的火车票查询工具.通过该项目的实现,可以熟悉 Python3 基础及网络编程,以及 docopt,requests,pretty ...

  9. python刷火车票_Python3实现火车票查询工具

    Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1.  知识点: Pyth ...

  10. 有人用python抢到过吗_再不看就晚了,我用Python抢到了回家的火车票!

    原标题:再不看就晚了,我用Python抢到了回家的火车票! 不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票 ...

最新文章

  1. App3种开发方式的优劣分析:原生、混合和H5
  2. python性能分析
  3. DotNetNuke各项业务外包
  4. mysql5.7.17配置_mysql-5.7.17-winx64的安装配置
  5. 使用Cloud SQL的Google App Engine全文搜索
  6. c语言程序设计主编张玉生教材答案,清华大学出版社-图书详情-《Visual Basic程序设计实验指导》...
  7. linux open出现乱码,OpenStack 数据库中文乱码问题
  8. 《推荐系统实战(二)》音乐推荐系统(数据清洗、召回、排序)
  9. 中国武侠片的50条爆笑定律
  10. NYOJ题目171-聪明的kk(dp)
  11. js将华氏度转为摄氏度
  12. android der 编码,关于android:使用现有DER / PEM密钥的Javascript中的RSA加密
  13. echarts自定义legend图例和tooltip默认提示文字
  14. Flutter高仿微信-第52篇-群聊-清空聊天记录
  15. react and reduct 学习手记3
  16. 有关tty hangup
  17. 阿里:不清除35岁以上的P8员工!
  18. docker镜像使用及连接
  19. 车牌识别--倾斜矫正
  20. 激光共聚焦显微镜测量技术在汽车工业上的应用

热门文章

  1. win10系统cpu内核或逻辑核心缺少缺少,解决办法
  2. Python 爬虫监控女神的QQ空间新的说说,实现秒赞,并发送说说内容到你的邮箱
  3. 内容安全策略(content-security-policy)
  4. 透过 AI 技术解读人的行为 研究开发回声定位
  5. 服务器被攻击显示,怎么查看服务器被攻击
  6. 为什么数学不好,和语文有关系?
  7. winedt103系统找不到指定文件_latex排版(CTeX winEdit输出“系统找不到指定的文件”的终极解决办法)...
  8. fiddler电脑抓包和HttpCanary(小黄鸟)手机抓包教程
  9. 由于计算机启动了配置文件,提示由于启动计算机时出现了页面文件配置问题解决方法...
  10. 机器人理论简介—— 台湾交通大学机器人学公开课(一)