美文网首页
Python3火车票信息查询(2)

Python3火车票信息查询(2)

作者: AlexDM | 来源:发表于2017-02-23 18:20 被阅读51次
    良辰美景奈何天

    前一篇文章记录了利用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

    相关文章

      网友评论

          本文标题:Python3火车票信息查询(2)

          本文链接:https://www.haomeiwen.com/subject/mepbwttx.html