目錄
為什麼爬摩拜的數據
從哪裡取得數據
轉機
其他嘗試
也談API的設計
首頁 後端開發 Python教學 摩拜單車爬蟲解析-找到API

摩拜單車爬蟲解析-找到API

Apr 04, 2017 am 10:37 AM
api 摩拜單車

警告:此篇文章僅作為學習研究參考用途,請不要用於非法目的。

在上一篇文章《摩拜單車非官方大數據分析》中提到了我在春節期間對摩拜單車的數據分析,在後面的系列文章中我將進一步的闡述我的爬蟲是如何有效率的爬到這些數據的。

為什麼爬摩拜的數據

摩拜是最早進入成都的共享單車,每天我從地鐵站下來的時候,在APP中能看到很多單車,但走到那裡的時候,才發現車子不在那裡。有些車不知道藏到了哪裡;有些車或許是在高樓的後面,由於有GPS的誤差而找不到了;有些車被放到了小區裡面,一道牆之隔讓騎車人無法獲得到車。

那麼有沒有一個辦法可以透過獲得這些單車的數據,來分析這些車是否變成了殭屍車?是否有人故意放到社區裡面讓人無法取得?

帶著這些問題,我開始了研究如何取得這些數據。

從哪裡取得數據

如果你能夠看到數據,那麼我們總有辦法自動化的取得到這些數據。只不過獲取數據的方式方法決定了獲取數據的效率,對於摩拜單車的數據分析這個任務而言,這個爬蟲要能夠在短時間內(通常是10分鐘左右)獲取到更多的數據,對於數據分析才有用處。那麼數據來源於哪裡呢?

最直接的來源是摩拜單車的APP。現代的軟體設計都講究前後端分離,而且服務端會同時服務APP、網頁等。在這種趨勢下我們只需要搞清楚軟體的HTTP請求就好了。一般而言有以下一些工具可以幫忙:

直接抓包:

以代理程式進行HTTP請求抓包及偵錯

  • Fiddler 4

  • Charles

  • # #Packet Capture (Android)

由於我的手機沒有root,在路由器上抓包又太多的干擾,對於https也不好弄。所以只能先採用Fiddler或Charles的方式試試。掛上Fiddler的代理,然後在手機端不停的移動位置,看有沒有新的請求。但遺憾的是似乎請求都是去拿高德

地圖的,並沒有跟摩拜車相關的數據。

那怎麼一回事?試試手機端的。換成Packet Capture後果然就有流量了,在請求中找到了我最關心的那個:

摩拜單車爬蟲解析-找到API

4372317-de272f8395d2106f.png

這個

API請求一看就很顯然了,在postman中試了一下能夠正確的回傳訊息,看來就是你了!

高興得太早

連續爬了幾天的數據,將數據進行一分析,發現摩拜單車的GPS似乎一直在跳動,有時候跳動會超過幾公里的距離,顯然不是一個正常的值。

難道是他們的

介面做了手腳回傳的是假資料?我觀察到即便在APP中,單車回傳的數據也有跳動。有某一天凌晨到第二天早上,我隔段時間刷新一下我家附近的車,看看是否真的如此。

圖片我找不到了,但觀察後得出的結論是,APP中返回的位置確實有問題。有一輛車放在很偏僻的位置,一會兒就不見了,待會兒又回來了,和我抓下來的數據吻合。而且這個跳動和手機、手機號碼、甚至行動電信業者都沒有關係,說明這個跳動是摩拜介面的問題,也可以從另一方面解釋為什麼有時候看到車但其實那裡沒有車。

這是之前發的一個朋友圈的

視頻截圖,可以看到在營門口附近有一個尖,在那裡其實車是停住的,但是GPS軌跡顯示短時間內在附近攢動,甚至攢動到很遠,又回到那個位置。

摩拜單車爬蟲解析-找到API


這樣的資料對於資料分析來講根本沒法用,我差點就放棄了。

轉機

隨著微信小程式的火爆,摩拜單車也在第一時間出了小程式。我一看就笑了,不錯,又給我來了一個資料來源,試試看。用Packet Capture抓了一次資料後很容易確定API,具體過程就不在闡述。抓取後爬取了兩三天的數據,發現出現了轉機,數據符合正常的單車的軌跡。

剩下事情,就是提高爬蟲的效率了。

其他嘗試

有時候直接分析APP的源代碼會很方便的找到API入口,將摩拜的Android端的APP進行反編譯,但發現裡面除了一些資源檔有用外,其他的文件都是用奇虎360的混淆器加殼的。網路上有文章分析如何進行脫殼,但我沒有太多時間去鑽研,也就算了。

也談API的設計

摩拜單車的API之所以很容易抓取和分析,很大程度上來講是由於API設計的太簡陋:

  • #只使用http請求,使得很容易進行抓包分析

  • 在這些API中都沒有對request進行一些加密,使得自己的服務很容易被人利用。

  • 另外微信小程式也是洩漏API的一個重要來源,畢竟在APP中request請求可以透過native程式碼進行加密然後在發出,但在小程式中似乎還沒有這樣的功能。

如果大家有興趣,可以試著看一下小型藍單車APP的request,他們使用https請求,對資料的request進行了加密,要抓取到他們的資料難度會增加非常多。

當然了,如果摩拜單車官方不care數據的事情的話,這樣的API設計也是ok的。


以上是摩拜單車爬蟲解析-找到API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Manticore Search開發指南:快速建立搜尋API PHP和Manticore Search開發指南:快速建立搜尋API Aug 07, 2023 pm 06:05 PM

PHP和ManticoreSearch開發指南:快速建立搜尋API搜尋是現代Web應用程式中不可或缺的功能之一。無論是電子商務網站、社交媒體平台還是新聞門戶,都需要提供一個高效、準確的搜尋功能來幫助用戶找到他們感興趣的內容。而ManticoreSearch作為一個效能卓越的全文搜尋引擎,為我們提供了一個強大的工具來創建出色的搜尋API。本文將向您介紹如何

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? 如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? Sep 05, 2023 am 08:41 AM

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

如何處理Laravel API報錯問題 如何處理Laravel API報錯問題 Mar 06, 2024 pm 05:18 PM

標題:如何處理LaravelAPI報錯問題,需要具體程式碼範例在進行Laravel開發時,常會遇到API報錯的情況。這些報錯可​​能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關鍵的問題,本文將透過具體的程式碼範例來示範如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

Oracle API使用指南:探索資料介面技術 Oracle API使用指南:探索資料介面技術 Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

Oracle API整合策略解析:實現系統間無縫通信 Oracle API整合策略解析:實現系統間無縫通信 Mar 07, 2024 pm 10:09 PM

OracleAPI整合策略解析:實現系統間無縫通信,需要具體程式碼範例在當今數位化時代,企業內部系統之間需要相互通信和資料共享,而OracleAPI就是幫助實現系統間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範例幫助讀者更好地理解和應用OracleAPI。一、OracleAPI基本

React API呼叫指南:如何與後端API互動和資料傳輸 React API呼叫指南:如何與後端API互動和資料傳輸 Sep 26, 2023 am 10:19 AM

ReactAPI呼叫指南:如何與後端API進行互動和資料傳輸概述:在現代的Web開發中,與後端API進行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範例。安裝所需的依賴:首先,確保在專案中安裝了Axi

使用Python將API資料儲存為CSV格式 使用Python將API資料儲存為CSV格式 Aug 31, 2023 pm 09:09 PM

在資料驅動的應用程式和分析領域,API(應用程式介面)在從各種來源檢索資料方面發揮著至關重要的作用。使用API​​資料時,通常需要以易於存取和操作的格式儲存資料。其中一種格式是CSV(逗號分隔值),它允許有效地組織和儲存表格資料。本文將探討使用強大的程式語言Python將API資料儲存為CSV格式的過程。透過遵循本指南中概述的步驟,我們將學習如何從API中檢索資料、提取相關資訊並將其儲存在CSV檔案中以供進一步分析和處理。讓我們深入了解使用Python進行API資料處理的世界,並釋放CSV格式的潛

開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

See all articles