Python-实现火车票查询工具.docxVIP

  • 4
  • 0
  • 约1.04万字
  • 约 19页
  • 2019-09-27 发布于江苏
  • 举报
PAGE PAGE 1 Python实现火车票查询 项目简介 当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚掌握了 Python 基础,这将是个不错的小练习。 1.1 知识点 Python 基础知识的综合运用 docopt、requests、colorama?及?prettytable?库的使用 setuptools 的使用 1.2 效果截图 二、接口设计 一个应用写出来最终是要给人使用的,哪怕只是给你自己使用。 所以,首先应该想想你希望怎么使用它?让我们先给这个小应用起个名字吧,既然及查询票务信息,那就叫它?tickets?好了。 我们希望用户只要输入出发站,到达站以及日期就让就能获得想要的信息,比如要查看10月30号上海-北京的火车余票, 我们只需输入: $ python tickets.py 上海 北京 2016-10-30 注意:上面的日期(包括后面的)是笔者写文章时确定的日期,当你在做这个项目的时候可能要根据当前时间做适当调整。 转化为程序语言就是: $ python tickets.py from to date 另外,火车有各种类型,高铁、动车、特快、快速和直达,我们希望可以提供选项只查询特定的一种或几种的火车,所以,我们应该有下面这些选项: -g 高铁 -d 动车 -t 特快 -k 快速 -z 直达 这几个选项应该能被组合使用,所以,最终我们的接口应该是这个样子的: $ python tickets.py [-gdtkz] from to date 接口已经确定好了,剩下的就是实现它了。 三、代码实现 首先安装一下实验需要用到的库: $ sudo pip3 install requests prettytable docopt colorama requests,使用 Python 访问 HTTP 资源的必备库。 docopt,Python3 命令行参数解析工具。 prettytable, 格式化信息打印工具,能让你像 MySQL 那样打印数据。 colorama,命令行着色工具 3.1 解析参数 Python有很多写命令行参数解析工具,如?argparse,?docopt,?click,这里我们选用的是?docopt这个简单易用的工具。docopt?可以按我们在文档字符串中定义的格式来解析参数,比如我们在?tickets.py?中写下下面的内容(实验楼环境下,通过点击右下角的键盘小图标可以选择中文输入法): # coding: utf-8 命令行火车票查看器 Usage: tickets [-gdtkz] from to date Options: -h,--help 显示帮助菜单 -g 高铁 -d 动车 -t 特快 -k 快速 -z 直达 Example: tickets 北京 上海 2016-10-10 tickets -dg 成都 南京 2016-10-10 from docopt import docopt def cli(): command-line interface arguments = docopt(__doc__) print(arguments) if __name__ == __main__: cli() 上面的程序中,?docopt?会根据我们在?docstring?中的定义的格式自动解析出参数并返回一个字典,也就是?arguments, 我们打印出了这个字典的内容。下面我们运行一下这个程序, 比如查询一下10月30号从成都到南京的动车和高铁: $ python tickets.py -dg 成都 南京 2016-10-10 我们得到下面的参数解析结果: 3.2 获取数据 参数已经解析好了,下面就是如何获取数据了,这也是最主要的部分。首先我们用实验楼环境的Firefox浏览打开? 12306,进入余票查询页面,按下?F12?打开开发者工具,选中?Network?一栏,在查询框中随便查询一次,我们在调试工具观察下请求和响应: 注意到上面的请求 URL ,它是由基 URL?/otn/lcxxcx/query?加四个参数构成的,这四个参数分别代表,查询的类型(成人?学生?),日期,出发车站,到达车站: 再来看看响应: 返回的是JSON格式的数据! 我们打开返回的数据看看: 可以看到一列火车的数据用 P

文档评论(0)

1亿VIP精品文档

相关文档