12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票
12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

2.思路:使用Charles抓包,找到关键数值,然后模拟请求,获取数据存入数据库。要点:需要保持cookies,如果要大量抓取需要配置IP代理。

二、爬取步骤

1.Charles获取数据

模拟查询操作,然后使用搜索关键字(价格)获得数据所在接口,

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

这里获取得数据就是所有航班信息,为什么有多个呢?因为是多次获取的,最后一个是最全。所以如果想要获取最全得信息就多请求几次。

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

2.找到该请求需要的模式和数据

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

{"segmentList":[{"departDate":"2018-01-18","aCityCode":"44679","dCityCode":"2500"}],"adultQuantity":1,"childQuantity":"0","babyQuantity":"0","cabinClass":"0","channelCount":0,"selectFlightNos":"","distributeId":"","token":35997}这里的我们不知道的数据有"aCityCode","dCityCode","token",看字面意思可以明白"aCityCode","dCityCode"是出发和到达城市的代号,token应该是个验证值,服务器和本地端都会生成,验证相同则通过。所以只要我们解决了这两个就可以获取到数据值了。3.找到机场替换代码继续搜索可以找到HotCity就是包含我们要找的机场代码请点击此处输入图片描述

这里的domesticIndexCityList和intlIndexCityList就包含了所有机场代码对应

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

因为有空白的,所以我们在构造字典结构的时候注意删除掉,实现代码如下:

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

4.找到token值

这个token值我们在Charles中搜索不到,只能在页面里搜索到这么一串数字,但显然跟我们需要的token不是一个类型,但有可能相关。

AADFD9C5-92A6-4565-93FF-E96337BEEAA4

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

于是退回搜索界面,重复几次发现token值会变化,证明与cookies无关,可能是js文件在本地生成token。这时候就要祭出我们的大杀器chorme开发者工具。

(1)打开开发者工具中的Sources,准备进行断点调试

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

(2)在下面的Console输入token,发现可以关联两个变量,输入可得,token的值就是tokenSecret的值。

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

(3)接下来找一个相关的js进行断点调试,把tokenSecret加入Watch进行调试观察,找到tokenSecret生成的那一步骤

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

(4)耐心调试分析,最终找到tokenSecret生成跟598行的代码有关,复制出来格式化

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

可惜没有发现这里有生成tokenSecret痕迹,开发者工具继续一步步调试,最后找到tokenSecret

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

6.数据展示因为没想到有啥用,所以代码里没有清理数据,直接po单个数据格式上来吧,有人可能会说,为啥不用Phantomjs等浏览器获取token,也是很不错的方法,但是,如果你要大量且增量爬取的话,这个速度太慢耗费cpu高,不是首要选择,例如遍历所有日期和航线的话.....算了,仅供学习吧。

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票

如有侵权请联系小编删除哦!