12306确实很难攻下来!那么咱们就去把途牛给攻下来!抢回家机票
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高,不是首要选择,例如遍历所有日期和航线的话.....算了,仅供学习吧。
如有侵权请联系小编删除哦!
- 健身很难坚持下来,你的健身效果不明显,这是为什么呢?
- ?遂宁茶楼惊现"不速之客",比人还高的大蛇确实吓人!
- 一些谜一样的汪,感觉很难走进它们的内心世界……
- 滴滴CEO程维:确实丧失了足够的敬畏之心、安全红线和底线意识
- 滴滴CEO:确实丧失了底线意识 决心摒弃客服外包模式
- 广深港高铁9月23日通车 12306现“香港西九龙”站
- 网售处方药 只靠禁止很难解决问题
- 肚子鼓鼓很难看!9月建议多吃这些“刮油物”,清肠排毒一身轻
- 武穴,这座小城市确实改变了!
- 刘世锦:土地财政逐步走到了尽头,很难再持续了