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] 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-2822 tickets -t 北京 大同 2016-08-2823 """

24 from docopt importdocopt25 from requests importrequest26 importprettytable27 importcolorama28

29

30 defcli():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 '': '2016-10-30',8 '': '北京',9 '': '大同'}

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是一个很长的字符串,里边包括了所有车站中文名,拼音,简写,代号等,这里可以看到有很多信息,我们提取我们需要的信息中文字母和代号信息,我们用正则表达式来提取:

写一个简单的脚本抓取(parse_station.py):

#!/usr/bin/env python#-*- coding: utf-8 -*-#__Author__: hong

importreimportrequestsfrom pprint importpprint#pprint: 格式化输出

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

#获取URL

response = requests.get(url, verify=False)#正则提取中文字母和代号

stations = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)#indent:定义打印信息的缩进为4个空格

pprint(dict(stations), indent=4)

提出数据为一个dict 重定向到一个文件里(stations.py)定义字典名如下:

注意:

字典前边定义函数名为stations,默认使用utf-8中文显示乱码,可以切换为GBK。

python刷火车票_Python3实现火车票查询工具相关推荐

  1. python利用request+tkinter编写双色球查询工具

    最终结果呈现,如下: from random import randint from tkinter import * import json import requestsdef DoubleCol ...

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

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

  3. python 火车票查询,Python3实现火车票查询工具

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

  4. python火车票查询工具tkinter_python 3.6 tkinter+urllib+json实现火车车次信息查询功能...

    一.概述 妹子工作时需要大量地查询火车车次至南京的信息,包括该车次到达站(南京站or南京南站).到达时间.出发时间等,然后根据这些信息做下一步工作. 版本结束,趁着间歇期,帮她弄了个简易的批量查询工具 ...

  5. Python3 实现火车票查询工具

    https://www.shiyanlou.com/courses/623/labs/2072/document Python 实现火车票查询工具 一.实验简介 当你想查询一下火车票信息的时候,你还在 ...

  6. 用python抢火车票_Python3实现抢火车票功能(中)

    导语 在"python抢火车票(上)"一文中我们完成了项目内容1和项目内容2,即利用python实现火车/高铁票查询功能以及利用python实现抢火车/高铁票功能,对项目内容1和项 ...

  7. 如何用python抢火车票_Python3实现抢火车票功能(上)

    原标题:Python3实现抢火车票功能(上) 项目内容 (1)利用python实现火车/高铁票查询功能: (2)利用python实现抢火车/高铁票功能: 项目内容1 相关模块: requests模块. ...

  8. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  9. python必背100源代码-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

最新文章

  1. 树莓派学习笔记——GPIO功能学习
  2. Python守护进程和脚本单例运行
  3. android状态机是线程么,Java中的线程状态机 - java
  4. 最优化理论与算法笔记
  5. RabbitMQ核心概念和AMQP协议(二)
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的快递管理系统
  7. JavaScript高级程序设计(4)
  8. 我的QQ斗地主史及斗地主经验
  9. Confluence 6 的小型文字档案(Cookies)
  10. 小野猫(xiaoyemaokeji)用python写了一个hello world。
  11. ubuntu20.04虚拟机使用水星mw150us无线usb接口网卡
  12. dedecms织梦模板|响应式粉红色母婴月嫂源码 母婴育儿类网站模板(自适应手机版)
  13. Android开发——编译FFmpeg(一、前言)
  14. 系统辨识实例(2)——利用BP神经网络进行基本非线性函数辨识
  15. Java爬虫系列(五) - 爬虫补充内容+ElasticSearch展示数据
  16. 网站会员与动网论坛会员同步整合非官方方法
  17. 用查表的方法将一位十六进制数转换成与它相应的ASCII码
  18. DCQCN+QCN+DCTCP
  19. oracle自连接和自然连接,一个θ连接,equijoin和自然连接之间的区别
  20. SpringBoot 生成pdf文件(含报表)

热门文章

  1. 【2021年1月】RT-Thread社区简报
  2. 菜鸟教程 - Python 100例
  3. 移动宽带无法连接微软服务器,无法连接到移动宽带 - Windows Client | Microsoft Docs...
  4. 1分钟链圈 | 告急告急!区块链人才极度稀缺,需求三年爆增19倍;区块链板块早盘爆发,易见股份直线封涨停
  5. c语言带进位循环左移,带进位循环左移指令.ppt
  6. Jetty 源码分析
  7. C#在 Visual Studio 中快捷生成toString方法重写
  8. 基于php049校园团购网站
  9. xp2系统下AMD的CPU双核完整补丁及其安装步骤
  10. 新浪微博分享MD5签名生成器没反应