(工作總結-途家業務)關於途家網爬蟲的一點總結


業務背景

  由於公司民宿的業務需求,需要
  - 在未登錄情況下基於爬蟲針對途家網的房源的房態、價格、房源信息、上下架情況等進行實時追蹤,
  - 在登錄情況下,同步房東端的房源、訂單、賬單等信息;
  - 在登錄情況下,完成房東房源的開關房、上下架、改價、改庫存等操作;
  - 完成自動登錄獲取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