警告:此篇文章僅作為學習研究參考用途,請不要用於非法目的。
在上一篇文章《摩拜單車非官方大數據分析》中提到了我在春節期間對摩拜單車的數據分析,在後面的系列文章中我將進一步的闡述我的爬蟲是如何有效率的爬到這些數據的。
摩拜是最早進入成都的共享單車,每天我從地鐵站下來的時候,在APP中能看到很多單車,但走到那裡的時候,才發現車子不在那裡。有些車不知道藏到了哪裡;有些車或許是在高樓的後面,由於有GPS的誤差而找不到了;有些車被放到了小區裡面,一道牆之隔讓騎車人無法獲得到車。
那麼有沒有一個辦法可以透過獲得這些單車的數據,來分析這些車是否變成了殭屍車?是否有人故意放到社區裡面讓人無法取得?
帶著這些問題,我開始了研究如何取得這些數據。
如果你能夠看到數據,那麼我們總有辦法自動化的取得到這些數據。只不過獲取數據的方式方法決定了獲取數據的效率,對於摩拜單車的數據分析這個任務而言,這個爬蟲要能夠在短時間內(通常是10分鐘左右)獲取到更多的數據,對於數據分析才有用處。那麼數據來源於哪裡呢?
最直接的來源是摩拜單車的APP。現代的軟體設計都講究前後端分離,而且服務端會同時服務APP、網頁等。在這種趨勢下我們只需要搞清楚軟體的HTTP請求就好了。一般而言有以下一些工具可以幫忙:
直接抓包:
以代理程式進行HTTP請求抓包及偵錯:
Fiddler 4
Charles
API請求一看就很顯然了,在postman中試了一下能夠正確的回傳訊息,看來就是你了!
高興得太早連續爬了幾天的數據,將數據進行一分析,發現摩拜單車的GPS似乎一直在跳動,有時候跳動會超過幾公里的距離,顯然不是一個正常的值。 難道是他們的介面做了手腳回傳的是假資料?我觀察到即便在APP中,單車回傳的數據也有跳動。有某一天凌晨到第二天早上,我隔段時間刷新一下我家附近的車,看看是否真的如此。
這是之前發的一個朋友圈的視頻截圖,可以看到在營門口附近有一個尖,在那裡其實車是停住的,但是GPS軌跡顯示短時間內在附近攢動,甚至攢動到很遠,又回到那個位置。
隨著微信小程式的火爆,摩拜單車也在第一時間出了小程式。我一看就笑了,不錯,又給我來了一個資料來源,試試看。用Packet Capture抓了一次資料後很容易確定API,具體過程就不在闡述。抓取後爬取了兩三天的數據,發現出現了轉機,數據符合正常的單車的軌跡。
剩下事情,就是提高爬蟲的效率了。
有時候直接分析APP的源代碼會很方便的找到API入口,將摩拜的Android端的APP進行反編譯,但發現裡面除了一些資源檔有用外,其他的文件都是用奇虎360的混淆器加殼的。網路上有文章分析如何進行脫殼,但我沒有太多時間去鑽研,也就算了。
摩拜單車的API之所以很容易抓取和分析,很大程度上來講是由於API設計的太簡陋:
#只使用http請求,使得很容易進行抓包分析
在這些API中都沒有對request進行一些加密,使得自己的服務很容易被人利用。
另外微信小程式也是洩漏API的一個重要來源,畢竟在APP中request請求可以透過native程式碼進行加密然後在發出,但在小程式中似乎還沒有這樣的功能。
如果大家有興趣,可以試著看一下小型藍單車APP的request,他們使用https請求,對資料的request進行了加密,要抓取到他們的資料難度會增加非常多。
當然了,如果摩拜單車官方不care數據的事情的話,這樣的API設計也是ok的。
以上是摩拜單車爬蟲解析-找到API的詳細內容。更多資訊請關注PHP中文網其他相關文章!