Python3火车票信息查询(2)

良辰美景奈何天

前一篇文章记录了利用Python查询火车票的的代码,本篇文章记录一下其中的一些知识点:
1、docopt
2、抓取数据requests
3、pprint、prettytable、colorama模块
4、Python类

1、docopt模块

首先介绍一下docopt:
docopt根据你写的文档描述,可以自动为你生成解析器,
可以非常容易的为你的python程序创建命令行界面(Command Line Interface,CLI)。
docopt的安装和一般的库没有什么区别 pip install docopt
他的使用方法是这样的:
由三个双引号括起来(当然是成对的),作为文档的标识,内容包括四部分:
1、脚本的功能解释
2、usage 是使用方法,第一个参数是脚本的名称,在[]内的是可选参数,<>是必选的参数
3、参数的说明
4、使用举例
可以看一下之前的代码:

"""命令行火车票查看器

Usage:
    tickets [-dgktz] <from> <to> <date>

Options:
    -h, --help 查看帮助
    -d         动车
    -g         高铁
    -k         快速
    -t         特快
    -z         直达

Examples:
    tickets 上海 安阳 2016-10-10
    tickets -dg 上海 安阳 2016-10-10
"""
接下来就是代码中获取参数,使用起来也是比较简单的
arguments = docopt(__doc__)
from_station = stations.get(arguments['<from>'])
to_station = stations.get(arguments['<to>'])
date = arguments['<date>']

2、获取123306网站数据

第二个是获取12306的余票信息,通过requests的get函数
先是定义URL地址,然后通过requests.get(url)获取数据,
在本次的代码中,verify=False,忽略对SSL证书的验证,
获取的数据转换为json格式
通过r.json().keys() 可以查看都有哪些数据
dict_keys(['httpstatus', 'data', 'status', 'validateMessagesShowId', 'messages', 'validateMessages'])

3、pprint、prettytable、colorama模块

第三个是pprint模块的打印函数pprint
这个模块提供了一些比较好的打印函数,如果和json模块配合使用,对于输出结构化数据比较好

下面一段内容是从官方文档拷贝的,对这个函数进行了详细的说明:
pprint.pprint(object, stream=None, indent=1, width=80, depth=None)

Prints the formatted representation of object on stream, followed by a newline. If stream is None, sys.stdout is used. This may be used in the interactive interpreter instead of the print() function for inspecting values (you can even reassign print = pprint.pprint for use within a scope). indent, width and depth will be passed to the PrettyPrinter constructor as formatting parameters.

这部分的第二个内容是prettytable,这个模块不是Python的内置模块,需要自己安装
在上一篇文章中我们看到了prettytable的使用方法:
def pretty_print(self):
        pt = PrettyTable()
        pt._set_field_names(self.header)
        for train in self.trains:
            pt.add_row(train)
        print(pt)
这里先定义了一个prettytable的类pt,然后通过_set_fiel_names设置了表头,之后在循环里面依次添加行记录,然后打印出来

另外还看到了一种用法,增加了一些设置参数
x = PrettyTable(["name", "age", "sex", "money"])
x.align["name"] = "l" # 对齐方式
x.padding_width = 0 # 每个字段中的内容距离边界的距离,可以修改这个参数看看效果
x.add_row(["Rocky",20, "male", 8000])
x.add_row(["Alex",21, "male", 5000])
x.add_row(["Helen",22, "Female", 3000])
print x

这部分的最后一个内容是colorama,这个模块是用来对输出内容的颜色进行控制的
init(autoreset=True) 
 #通过使用autoreset参数可以让变色效果只对当前输出起作用,输出完成后颜色恢复默认设置
Fore.GREEN + raw_train['from_station_name'] # 输出绿色字符

4、Python的类知识

在本次的代码实现过程中,作者定义了一个类,用来将获取的车次信息整理为良好的输出格式,
对于Python类的信息在书上、网上可以查到好多资料,这里就不记录了,
刚刚开始的时候对类中的self不是很熟悉,用起来感觉很别扭,要勤加练习
面向对象技术简介
类(Class): 用来描述具有相同的属性和方法的对象的集合。
          它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。
           类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,
          可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
          继承也允许把一个派生类的对象作为一个基类对象对待。          
          例如,有这样一个设计:一个Dog类型的对象派生自Animal类,
          这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

参考资料:
http://cn.python-requests.org/zh_CN/latest/user/advanced.html
http://hao.jobbole.com/docopt/
https://docs.python.org/3.2/library/pprint.html
https://github.com/dprince/python-prettytable
http://www.runoob.com/python/python-object.html
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容