导语
眼看国庆10月1号刚好还有一个整月,一般小编都是回家前几天买票的,那在回家的这种高峰期还买的到票嘛?小编自有办法!
那么你们回家买买买买买的到票吗?是不是一个不注意,回家的票就被神奇地抢空了?
大兄弟们,不用担心,咱学习python编程是干嘛用的?不就是为了解决这些所谓的难题的嘛。所以,赶紧啃完本教程,让那些小心翼翼守在电脑前抢票的日子离你远去!!!不管是节假日还是周末会老家统统不用担心了~
今天手把手教大家用python抢票回家!!
正文
(1)用户只要输入出发站,到达站以及日期就让就能获得想要的信息,tickets这样的名字刚好适用:
$ tickets from to date
(2)火车有各种类型,高铁、动车、特快、快速和直达,可以提供选项只查询特定的一种或几种的火车,下面这些选项:
-
-g 高铁
-
-d 动车
-
-t 特快
-
-k 快速
-
-z 直达
(3)如下接口组合使用:
$ tickets [-gdtkz] from to date
(4)环境安装:
写Python程序使用virtualenv这个工具建一个虚拟的环境。
我们的程序使用Python3开发,下面在你的工作目录下建一个文件夹tickets,进去创建一个虚拟环境:
$ virtualenv -p /usr/bin/python3 venv
通过这个命令激活它: $ . venv/bin/activate
(5)解析参数:Python有很多写命令行应用的工具,这里,我们选用docopt这个简单易用的工具,我们先安装它:
$ pip3 install docopt
docopt可以按我们在文档字符串中定义的格式来解析参数,在tickets.py中:
(6)下面我们运行一下这个程序:
$ python3 tickets.py 上海 北京 2016-07-01
我们得到下面的参数解析结果:
(7)获取数据:首先我们打开12306,进入余票查询页面,如果你使用chrome,那么按F12打开开发者工具,选中Network一栏,在查询框钟我们输入地址跟日期会出现的URL地址。
返回的是Json格式的数据!接下来问题我们只需要构建请求URL然后解析返回的Json数据就可以了。但是我们发现,URL里面from_station和to_station并不是汉字,而是一个代号,而用户输入的是汉字,接下来
我们在网页里面找到了这个链接:
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955
里面貌似是包含了所有车站的中文名,拼音,简写和代号等信息, 我们在项目目录下将它保存为stations.html。
直接使用正则表达式,我们写个小脚本来匹配提取出想要的信息即可, 在parse.py中:
(8)我们运行这个脚本,它将以字典的形式返回所有车站和它的大写字母代号, 我们将结果重定向到stations.py中:
$ python3 parse.py > stations.py
我们为这个字典加名字,stations, 最终,stations.py文件是这样的:
现在用户输入车站的中文名,我们就可以直接从这个字典中获取它的字母代码了:
(9)下面我们来请求这个URL获取数据吧!这里我们使用requests这个库:
$ pip3 install requests
进一步提前车票信息:
(10)结果显示:prettytable这个库可以让我们它像MySQL数据库那样格式化显示数据。
$ pip3 install prettytable
这样使用:
12306抢票Python代码:
1.实现自动登录的函数:
2.开始购票的函数:
效果图:
总结
🎊🎊源码基地:关注小编获取哦~💝记得三连吖 “抢票助手小程序”即可免费获取哦~
欢迎阅读往期文章,记得三连,爱你!