去哪兒 爬蟲 pre

本文目標:去哪兒網(qunar.com)的主要關鍵字段pre

我們的目標是獲取以下鏈接返回的數據:

https://flight.qunar.com/site/oneway_list.htm?searchDepartureAirport=%E5%8C%97%E4%BA%AC&searchArrivalAirport=%E6%88%90%E9%83%BD&searchDepartureTime=2019-11-16&searchArrivalTime=2019-11-19&nextNDays=0&startSearch=true&fromCode=BJS&toCode=CTU&from=qunarindex&lowestPrice=null

經多方調試,這裏主要的字段就是headers中的pre參數。

 

其他參數可以固定使用。太過簡單的就不介紹了。

從朋友那兒得知,目前大家獲取這個參數主要就是依靠selenium模擬獲取,作爲爬蟲工程師,用selenium是迫不得已的下下策,所以,一怒之下,自己動手,把這個參數給解了,純代碼實現,不需要藉助selenium,這纔是爬蟲該有的姿態。

查找pre的調用位置:

顯然pre是通過window._pt_ 獲得。

經過多方查找,最後看到前端源碼裏面的script標籤,這段熟悉又陌生的代碼。

 複製這段js到本地、格式化、運行。成功看到:內存溢出報錯:

內存溢出,判斷是代碼進入了死循環,只能console.log慢慢識別具體的位置,好吧,這個過程,花費三天三夜。不盡一個地方會導致內存溢出,每段這串js代碼都有多處讓你崩潰的溢出。沒辦法,只能一個一個找。

鬼叼的是,不同的js返回,溢出的地方,並不一樣。調試這個還是需要耐心、耐心、耐心。

解決完內存溢出後,運行代碼,發現,並沒有生成我們需要的window._pt_

這不科學,難道這段代碼並不是我們需要的代碼,不存在的,在多次斷點之後,發現加載完這個代碼後,window._pt_就已經生成了,這時查看了源碼返回的其他script下的 代碼,會不會是其他的代碼生成的,可惜,其他js代碼並沒有做什麼重要事情。

那麼最後還是回到這段代碼上來,既然運行沒有報錯,卻沒有生成我們需要的參數,那很可能是某塊的代碼並沒有運行。

於是又是一段瘋狂的斷點輸出,甄別具體沒有運行到的代碼。

最後果然發現有一段是沒有運行到的。

即使發現了問題,但是,這中間又出現了無數個無法進行下去的坑,苦戰幾天幾夜,最後完美用純代碼的方式生成pre:

 

 

目前網上普遍都是用selenium模擬生成這個參數,自己硬幹把它解出來的過程是艱辛的,當然也充滿着樂趣。

純屬個人愛好,不做任何數據的抓取。

破解技術交流,歡迎勾搭。

更多粉絲可見的文章,歡迎點擊關注。

 

QQ:  MTE2NTY3MzkzNg==      (base64)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章