Python3实现火车票查询工具

Python 实现火车票查询工具

一. 实验介绍

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

1.  知识点: 

  • Python 基础知识的综合运用
  • docopt, requests, colorama, prettytable 库的使用
  • setuptools 的使用

2. 效果截图:

二. 接口设计

  接口我们就按照12306官网的查询格式如下:

    程序名: pickets

  查询方式: 程序名 出发地 目的地 出发日

  火车类型:

      -g    高铁

      -d    动车

      -t    特快

      -k    快速

      -z    直达

  最终组合接口为:

    python  pickets.py  [-gdtkz]  from  to   date

三. 代码实现

  根据接口设计需要安装的库:

G:\Python项目实战\pickets>pip3 install requests prettytable docopt colorama

  requests:  使用Python访问HTTP资源的必备库            详细使用请访问:http://www.cnblogs.com/python-nameless/p/6013647.html

   prettytable: 可以将打印内容格式化为像MySQL一样的输出      详细使用请访问:http://www.cnblogs.com/python-nameless/p/6013698.html

   docopt:命令行参数解析工具                     详细使用请访问:https://github.com/docopt/docopt

   colorama: 命令行着色工具

1. 解析参数

  docopt模块可以按照我们自己在文档字符串定义的格式来解析参数,如下:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # __Author__: Hong
 4
 5 """火车票查询工具
 6
 7 Usage:
 8     tickets [-gdtkz] <from> <to> <date>
 9
10 注意:Usage为固定词汇,其他报错。
11
12 Options:
13     -h,--help   显示帮助菜单
14     -g          高铁
15     -d          动车
16     -t          特快
17     -k          快速
18     -z          直达
19
20 Example:
21     tickets 北京 大同 2016-08-28
22     tickets -t 北京 大同 2016-08-28
23 """
24 from docopt import docopt
25 from requests import request
26 import prettytable
27 import colorama
28
29
30 def cli():
31     """command-line interface"""
32
33     arguments = docopt(__doc__)
34     print(arguments)
35
36 if __name__ == ‘__main__‘:
37     cli()

由上面的程序中,docopt会根据我们在docstring中定义的格式解析参数并返回一个字典(arguments),例如查询北京到大同的特快如下:

G:\Python项目实战\pickets>python pickets.py -tk  北京 大同 2016-10-30

参数解析结果:

1 G:\Python项目实战\pickets>python pickets.py -tk  北京 大同 2016-10-30
2 {‘-d‘: False,
3  ‘-g‘: False,
4  ‘-k‘: True,
5  ‘-t‘: True,
6  ‘-z‘: False,
7  ‘<date>‘: ‘2016-10-30‘,
8  ‘<from>‘: ‘北京‘,
9  ‘<to>‘: ‘大同‘}

2. 获取数据

  参数解析好以后,我们可以通过12306官网获取我们需要的数据,IE浏览器打开12306官网的查票系统,输入出发地,目的地,日期,查询,通过F12开发者模式找到请求地址(刷新一次):

通过此请求URL,我们可以看到有我们需要的信息,或者直接点击参数查看:

  可以看到参数为:出发地   查询类型(成人,学生)   日期  目的地

通过正文可以看到:返回一个json格式的数据,即一个字典,里边包括了各个站点的中文名和站点代号,我们可以利用这个接口来获取。

打开此页的源码(在页面右击选择查看源码):

查看一下具体内容:

复制此链接前边需要加一级域名https://kyfw.12306.cn打开, 如下:

https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971

station_names是一个很长的字符串,里边包括了所有车站中文名,拼音,简写,代号等,

时间: 2024-10-27 06:56:39

Python3实现火车票查询工具的相关文章

12306火车票查询工具

使用Python实现的火车票查询工具: Usage: ticket.py [-gdtzk] <from> <to> <date> Options: -h,--help 帮助信息 -a 所有 -g 高铁 -d 动车 -t 特快 -z 直达 -k 快速 Demo: ticket.py shenzhen beijing 20161001 -g 1 #!/usr/bin/env python 2 #coding:utf-8 3 import urllib2,re,json 4

微信小程序--火车票查询

原文:http://www.cnblogs.com/tgyf/p/5960979.html 写在最前面 微信小程序自九月份推出内测资格以来,经历了舆论热潮到现在看似冷清,但并不意味着大家不那么关注或者不关注了.我想不管是否有内测资格,只要是感兴趣的开发者已经进入潜心耕耘产品的阶段了,至少是静下心来思考与学习.如果对微信小程序的前途和定位有什么疑惑,可以看看这篇文章http://lib.csdn.net/article/wechat/46742. 下面从字母a开始编号的内容主要作为后续学习与思考后

12306泄露信息查询工具 12306回应信息泄露

12306用户数据泄露今年日登上各大媒体头版头条,从曝光的截图来看,泄露结果超过13万条,包括邮箱.手机号.身份证号等敏感信息一一在列. 更让人恐怖的是,已经有网友反映,称自己在12306上买好的火车票不见了,显然是被人利用泄露信息给恶意退掉了! 此外,泄露资料的用户还很可能遭遇各种骚扰.诈骗,比如说各种垃圾短信和广告,比如说以退票为借口的行骗,而且因为很多人还都在网站上填写了亲人.好友信息共同买票,甚至可能牵连亲友. 当下之急,就是立即修改12306密码,而且尽量不要和其它网站上的密码重复.

12306火车票查询爬虫(基于selenium)

今天写一下12306火车票查询的爬虫,新手一个,代码方面可能不是那么整洁,望海涵... 一. 这个火车票爬虫感觉还是有点难度的,一些小细节需要考虑. 二. 还是先讲一下思路:  获得火车票查询URL----->单击'单程'------->点击出发输入框,输入城市,选取站点------>目的地输入同上一步------>点击出发日期那个框,选取出发日期.------>点击"查询"按钮------>前面几步用selenuim实现------>创建几个

Linux命令(37):dig命令-域名查询工具

dig命令 功能说明 dig和nslookup一样,也是域名查询工具,用来测试域名系统是否正常工作.这二个命令都在bind-utils包下,dig用起来比nslookup方便.用法如下: dig [参数] [选项] 常用参数 选项 说明 @server 如果不想以/etc/resolv.conf来作为dns主机,则可以在此填入其他的IP -t(type) 指定查询类型 -x 逆向查询 +short 提供一个简短的回复,默认是长的 示例                     域名解析为IP地址

Linux命令(38):host命令-域名查询工具

host命令 功能说明 host命令是常用的域名查询工具,和nslookup.dig功能基本相同,用法如下: host [参数] [选项] 常用参数 选项 说明 -a 查询DNS详细信息相当于-v -t -c(type) 指定查询类型,默认为IN -r 禁用递归处理 -t(type) 指定查询类型 包括a.all.mx.ns  示例                     查询jd.com信息 [[email protected] ~]# host jd.com jd.com has addre

微信小程序+OLAMI(欧拉蜜)自然语言API接口制作智能查询工具--快递、聊天、日历等

微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你.我建了一个QQ群656580961,感兴趣的朋友可以加入互通有无.或者你也可以直接下载代码试一试. 用微信扫描下面的二维码可以直接测试小程序 也可以通过关注下面的公众号,点解工具使用小程序 ----------------功能介绍: 我的小程序名字叫"智能生活宝"------------

java 数据库查询工具类.

import java.util.List;import java.util.Map; /** * 数据库查询工具类. * */public class QueryTool {        /**     * Checks if is condition.     *     * @param obj the obj     * @return true, if is condition     */    public static boolean isCondition(Object ob

基于nodejs的DNS查询工具

开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生于09年末,在一个JavaScript大会上宣布,当时这项在服务器端运行JavaScript技术让所有参会者惊奇,当时这位提出者给出了一个“hello world”的程序. 1 var http = require('http'); 2 var server = http.createServer(