(工作总结-途家业务)关于途家网爬虫的一点总结


业务背景

  由于公司民宿的业务需求,需要
  - 在未登录情况下基于爬虫针对途家网的房源的房态、价格、房源信息、上下架情况等进行实时追踪,
  - 在登录情况下,同步房东端的房源、订单、账单等信息;
  - 在登录情况下,完成房东房源的开关房、上下架、改价、改库存等操作;
  - 完成自动登录获取cookie的操作;
  **其中房态与价格为业务核心**

爬虫与反爬发展过程

  1.PC网页阶段;
  2.手机H5阶段;
  3.旧版本APP阶段;
  4.APP逆向阶段;
  5.佛系阶段;

具体过程

  1.PC网页阶段:
        *此时期,所有爬虫模块均为基于scrapy的单机式爬虫,业务量规模较小,所有接口均为途家网网页端接口;
        *工作难点在于接口的js加密的逆向,破解TJH等相关参数的生成方式,debug时会有无限死循环函数导致chrome卡死,最终解决方案是一步一步单步调试,完全破解加密参数,使用python重写js的加密逻辑,也可以使用execjs调用js核心代码;
  2.手机H5阶段:
        *基于PC接口破解的方式存在两个弊端,一是途家TJH加密版本经常升级,导致爬虫也失效;二是会产生假的数据,脏数据会污染生产环境。在某个版本后发现途家h5端虽有加密参数但是加密参数不生效,遂改成此接口,但不久h5接口亦有加密参数,因此该阶段只是过渡,此时业务量一般;
 3.旧版本APP阶段:
       *由于网页易升级的弊端,因此切换为老版本途家APP,使用flidder抓包,虽有加密参数,然亦未做处理,该版本稳定一段时间后失效,而且此时业务量急速扩张,需要稳定的爬虫模块支持;
 4.APP逆向阶段:
       *使用新版本途家APP,使用flidder抓包,其中核心的房态与价格功能均加密,初期其虽有加密参数,但校验比较松散,经不断升级调整,其请求头的header与payload的数据耦合性极高。
       *最终解决办法是基于jadx与IDA分析源代码,找出其加密.so文件,使用frida注入运行状态的app以调用生产加密参数的静态函数,并使用Flask发布接口获取frida的结果;
       *此阶段业务量继续飞速扩张,房源数量已达数万套,同时对多个模块进行了改造,自建了分布式的系统以保证及时性
 5.佛系阶段:
       * 可以看出途家做了极多的反爬措施,无论是假数据、js加密,还是各种极高耦合性的加密参数,还是IP或者登陆校验,以至于现在取消了PC网页端的情况,但目前来看都不是很难攻克。 
       *针对速度及时性的要求,途家房源数量较多,目前的处理方案是:设计分布式架构,使用redis做任务队列,scrapy/request负责抓取(根据场景使用),request的请求都放在线程池多线程运行,scrapy的都是同时起多进程,一个主节点为master负责产生任务,使用reids的zset对优先级进行排序,多个woker节点负责从redis取出优先级高的任务进行消费,目前仍在继续解耦合中,最终目的是爬虫爬取与业务完全分离,只负责数据正确与及时的抓取;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM