12306自动购票功能的实现

对于有爬虫基础的同学,随着学习的深入都会逐渐感觉到分析网页的重要性,12306的购票脚本对于分析网页有非常大的练习作用。

在接下来的文章,我们尝试来写一个比较完善的程序。

分析网页

12306的查票是不需要登录的,打开开发者调试工具,在这里我们刷新一下,有一个很重要的包需要抓到,然后填好出发地和目的地等信息,点击查票,余票信息就会显示。

12306抓包分析起来还是相对容易,请求数量不多。

点击图中位置,可以很快速的找到这一条查询的请求。

可以看到图中很多的乱码,是不是看着很晕,没关系,我们拖动滑动条往后看。

相信看到后面的“有”、“无”基本上就可以肯定这一条请求返回的就是余票信息。

再反过来看请求的URL,可以看到这一条请求是get请求,get请求显著的特点就是参数都是明文。我们来分析一下URL,关于参数我这里我之前的文章里面写过了,这里再写一次,已经看了的朋友可以直接跳过这一段。

https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date=2018-04-20&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

URL里面的参数是通过“?”开始,以key = value的形式传参,多个参数使用“&”连接。拆开来看:

leftTicketDTO.train_date=2018-04-20

leftTicketDTO.from_station=BJP

leftTicketDTO.to_station=SHH

purpose_codes=ADULT

通过字面意思基本就能明白这些参数是什么,从图里方框处能快速的得到参数信息。

四个参数分别是日期,出发地,目的地,成人或学生票。

起始站和终点站都使用了简写码,那么我们该如何获得这个简写码呢?

记得之前说过要先刷新一下,有个很重要的包吗?

网站把所有的简写码都告诉我们了。

网站基本上分析完毕了,那么写代码有思路了吗?

---------------------思考时间----------------------

编写代码

1.获取车站的简写码

前面已经知道了获取简写码信息的URL,为了查询起来比较方便,这里需要构造成字典的形式。

2.构造查询余票的URL

在requests传参可以通过关键字参数params来传入。

观察数据可以看到,数据是通过“|”来隔开的,所以我们也通过“|”来分割。

由于数据比较多,我这里就以硬座为例。

硬座对应的索引值是29,其他的索引值:

#索引值

# 3车次

# 8出发时间

# 9到达时间

# 10历时

# 23软卧

# 26无座

# 28硬卧

# 29硬座

# 30二等座

# 31一等座

小结

1.还是老规矩,提供思路,不提供源码,有什么问题可以留言交流。

2.本程序的运行思路是,由用户输入出发时间,出发地,目的地,通过之前获取的字典来查询到对应的简写码,构造查询余票的URL,获取余票信息,判断是否有票,输出结果

3.下一篇文章,我们来说说12306登录和如何接入打码平台,完成自动登录。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180411G1O6W300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券