python 爬蟲 亞航 指定日期間的航線


前兩天在BOSS上找爬蟲工作,投了N份簡歷,很少有回復的,唯一能看到點希望的是一家旅游公司,BOSS上回復說:要求做一些航空公司的爬蟲,做好之后把思路和一些數據發過去,再談后續的面試問題。

發過來兩個爬蟲項目,說如果面試通過,會根據所選的爬蟲項目進行工資定級,我選了這個據說是難度更大一些的:airasia.com。

花了兩天時間,搞定了這個爬蟲,按要求把采集到的一部分數據和爬蟲思路發送過去,結果是無人回復,我覺得,這份面試的機會,也這樣悄悄的,被別人擁有了吧~

也可能是我的簡歷太水,做過的一些爬蟲項目什么的,懶的往網上發,也不喜歡總結,結果找工作的時候沒有可拿的出手的東西,年紀也快30了,兩三年的爬蟲工作經歷又沒有優勢,拿什么和人家爭。

以后養成好習慣吧,把做過的東西整理好,作為以后個人的資歷。

# ----- 正題 -----

目的:采集指定日期內的所有航班的信息

語言:Python

框架:Scrapy

系統:Mac

抓包:Charles

反爬:動態代理、輪換請求頭

分析:想要得到航線的詳細信息,隨便找一個航線,Charles抓包,就能看到一個這個的地址:

“https://k.airasia.com/shopprice/0/0/TPE/DPS/2019-03-06/1/0/0”

里面包含有當天有幾趟航班、航班時間、地點、機倉類型、是否轉機、轉哪趟等詳實信息,所以我要拿的就是這個頁面。


現在的問題就是如何拿

在瀏覽器->開發者->Headers界面中,copy curl就可以拿到所有需要的信息,使用requests或者scrapy的方法進行請求,看能不能成功請求到上面的信息?
curl 'https://k.airasia.com/shopprice/0/0/TPE/DPS/2019-03-06/1/0/0' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://www.airasia.com/booking/select/zh/cn/TPE/DPS/2019-03-06/N/1/0/0/O/N/CNY/SC' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' -H 'X-Custom-Flag: 1' -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJBMXoyUWloUEtXSWdtYlJ3a0ExWXpHcjNobFZKN1hJMiIsImlhdCI6MTU0NDQzODIwOCwiZXhwIjoxNjA3NTk2NjA4LCJhdWQiOiJQV0EgRGV2Iiwic3ViIjoicHJhZGVlcGt1bWFyckBhaXJhc2lhLmNvbSJ9.QJPYvJvzx8IZFP6mYTAKwva7eQ_DVT_4JRwk75Uhhd8' --compressed
有一些疑惑,這里的cookie清除掉之后,仍然可以訪問,但Authorization這個值,我沒有拿到,通過搜索,我找到了這個值的位置,在js文件main.***.js之中。

而main后面跟隨的那串字符是不固定的,前幾天我做測試時一直沒變,但今天寫這篇文章時,就失效了,說明這不是一個永久鏈接,會隨時變化,再查找這串字符,它在網站ngsw中,這樣,最重要的一個信息,就能拿到了。
還有referer的值,這是包括航班起落點、起飛時間的值
https://www.airasia.com/booking/main.434aa9bdbcf8c08efda4.js
https://www.airasia.com/booking/ngsw.json
referer: https://www.airasia.com/booking/select/zh/cn/KUA/PVG/2019-02-25/N/1/0/0/O/N/CNY/SC

信息已經可以拿到了,這是最終一步,繼續反推,我們需要知道從哪里出發

還是要用Charles抓到的包,或者在瀏覽器->開發者中進行分析,分析始發、降落點信息在哪。
最終得到了兩個網站
https://sch.apiairasia.com/station/zh-cn/file.json
https://sch.apiairasia.com/stationoperate/zh-cn/file.json
以及這個:
https://sch.apiairasia.com/destination/kua/file.json
上面兩個站都是航站列表,下面的,則是通過KUA編碼航站樓可去往的地點。
我不知道那兩個列表中到底哪個才是可起飛的站點,不過多試總比錯過強,我把請求得到的數據進行了一下對比,station這個要比stationperate的站點要多,那我就假設它是起飛站的列表了,
通過for循環拼接destination的url地址就能得到所有可到達的起落點信息。
再把航線拼接成搜索頁的正確形式傳遞,就OK了。

基本,思路就是上面的這些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM