2.思路:使用Charles抓包,找到关键数值,然后模拟请求,获取数据存入数据库。要点:需要保持cookies,如果要大量抓取需要配置IP代理。
二、爬取步骤
1.Charles获取数据
模拟查询操作,然后使用搜索关键字(价格)获得数据所在接口,
这里获取得数据就是所有航班信息,为什么有多个呢?因为是多次获取的,最后一个是最全。所以如果想要获取最全得信息就多请求几次。
2.找到该请求需要的模式和数据
{"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就包含了所有机场代码对应
因为有空白的,所以我们在构造字典结构的时候注意删除掉,实现代码如下:
4.找到token值
这个token值我们在Charles中搜索不到,只能在页面里搜索到这么一串数字,但显然跟我们需要的token不是一个类型,但有可能相关。
AADFD9C5-92A6-4565-93FF-E96337BEEAA4
于是退回搜索界面,重复几次发现token值会变化,证明与cookies无关,可能是js文件在本地生成token。这时候就要祭出我们的大杀器chorme开发者工具。
(1)打开开发者工具中的Sources,准备进行断点调试
(2)在下面的Console输入token,发现可以关联两个变量,输入可得,token的值就是tokenSecret的值。
(3)接下来找一个相关的js进行断点调试,把tokenSecret加入Watch进行调试观察,找到tokenSecret生成的那一步骤
(4)耐心调试分析,最终找到tokenSecret生成跟598行的代码有关,复制出来格式化
可惜没有发现这里有生成tokenSecret痕迹,开发者工具继续一步步调试,最后找到tokenSecret
6.数据展示
因为没想到有啥用,所以代码里没有清理数据,直接po单个数据格式上来吧,有人可能会说,为啥不用Phantomjs等浏览器获取token,也是很不错的方法,但是,如果你要大量且增量爬取的话,这个速度太慢耗费cpu高,不是首要选择,例如遍历所有日期和航线的话.....算了,仅供学习吧。
如有侵权请联系小编删除哦!