专栏名称: Python学习交流
每天更新,更新python相关的知识。希望诸君有所收获!
目录
相关文章推荐
Python开发者  ·  “李飞飞团队50 美元炼出 ... ·  昨天  
Python开发者  ·  国产 DeepSeek V3 ... ·  2 天前  
Python爱好者社区  ·  1885页的Python完全版电子书 ·  3 天前  
Python爱好者社区  ·  多模态,杀疯了 ·  2 天前  
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  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







请到「今天看啥」查看全文