专栏名称: Python学习交流
每天更新,更新python相关的知识。希望诸君有所收获!
目录
相关文章推荐
Python爱好者社区  ·  为什么多数程序员都去做个人独立开发? ·  2 天前  
Python爱好者社区  ·  iPhone 16暴跌,价格崩到离谱。。。 ·  3 天前  
Python开发者  ·  用Python实现十大经典排序算法(附动图) ·  1 周前  
Python爱好者社区  ·  两天私活,5w到手 ·  1 周前  
Python爱好者社区  ·  终于不用为GPU算力发愁了,请低调使用! ·  6 天前  
51好读  ›  专栏  ›  Python学习交流

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

Python学习交流  · 公众号  · Python  · 2017-12-28 21:29

正文

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高,不是首要选择,例如遍历所有日期和航线的话.....算了,仅供学习吧。

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



推荐文章
Python爱好者社区  ·  为什么多数程序员都去做个人独立开发?
2 天前
Python爱好者社区  ·  iPhone 16暴跌,价格崩到离谱。。。
3 天前
Python开发者  ·  用Python实现十大经典排序算法(附动图)
1 周前
Python爱好者社区  ·  两天私活,5w到手
1 周前
Python爱好者社区  ·  终于不用为GPU算力发愁了,请低调使用!
6 天前
东七门  ·  零负担吃夜宵,终极答案在这里
7 年前
冲锋号  ·  别了,我挚爱的番号!
7 年前