火车票被秒光,别慌!一款 Python 自动抢票神器,收藏起来回家不愁!

744 阅读3分钟

导语

图片

眼看国庆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.开始购票的函数

图片

效果图:

总结

源码基地:#959755565#回复“抢票助手小程序”即可免费获取哦~

欢迎阅读往期文章,记得三连,爱你!

图片