APP數據的爬取

 前言

App 的爬取相比 Web 端爬取更加容易,反爬蟲能力沒有那麼強,並且數據大可能是以 JSON形式傳 輸的,解析更加簡單。在 Web 端,咱們能夠經過瀏覽器的開發者工具監聽到各個網絡請求和響應過程, 在 App 端若是想要查看這些內容就須要藉助抓包軟件。經常使用的抓包軟件有 WireShark、Filddler、Charles、 mitmproxy、 AnyProxy 等,它們的原理基本是相同的。 咱們能夠經過設置代理的方式將手機處於抓包 軟件的監昕之下,這樣即可以看到 App 在運行過程當中發生的全部請求和響應了,至關於分析 Ajax 一 樣。 若是這些請求的 URL、參數等都是有規律的,那麼總結出規律直接用程序模擬爬取便可,若是它 們沒有規律,那麼咱們能夠利用另外一個工具 mitmdump 對接 Python 腳本直接處理 Response。 另外, App 的爬取確定不能由人來完成,也須要作到自動化,因此咱們還要對 App 進行向動化控制, 這裏用 到的庫是 Appium。 api

1 Charles的使用

Charles 是一個網絡抓包工具,咱們能夠用它來作 App 的抓包分析,獲得 App 運行過程當中發生的 全部網絡請求和響應內容,這就和 Web 端瀏覽器的開發者工具 Network 部分看到的結果一致。 相比 Fiddler來講, Charles 的功能更強大,並且跨平臺支持更好。 因此咱們選用 Charles做爲主要 的移動端抓包工具,用於分析移動 App 的數據包,輔助完成 App 數據抓取工做。瀏覽器

本節咱們以京東 App 爲例,經過 Charles 抓取 App 運行過程當中的網絡數據包,而後查看具體的 Request 和 Response 內容,以此來了解 Charles 的用法。請確保已經正確安裝 Charles 並開啓了代理服務手機和 Charles 處於同一個局域網下Charles 代理和 CharlesCA 證書設置好。服務器

原理網絡

肯先 Charles 運行在本身的 PC 上, Charles 運行的時候會在 PC 的 8888 端口開啓一個代理服務, 這個服務其實是一個 HTTP/HTTP 的代理。
確保手機和 PC 在同一個局域網內,咱們可使用於機模擬器經過虛擬網絡鏈接,也可使用手 機點機和 PC 經過無線網絡鏈接。 設置手機代理爲 Charles 的代理地址這樣手機訪問互聯網的數據包就會流經 Charles, Charles 再 轉發這些數據包到真實的服務器,服務器返回的數據包再由 Charles 轉發回手機, Charles 就起到中間 人的做用,全部流量包均可以捕捉到,所以全部 HTTP 請求和響應均可以捕獲到。 同時 Charles 還有 僅力對請求和響應進行修改。併發

抓包 app

初始狀態下 Charles 的運行界面如圖工具

Charles 會一直監聽 PC 和手機發生的網絡數據包,捕獲到的數據包就會顯示在左側,隨着時間的 推移,捕獲的數據包愈來愈多, 左側列表的內容也會愈來愈多。
能夠看到,圖中左側顯示了 Charles 抓取到的請求站點,咱們點擊任意一個條目即可以查看對應 請求的詳細信息,其中包括 Request、 Response 等內容。 接下來清空 Charles 的抓取結果, 點擊左側的掃帚按鈕便可清空當前捕獲到的全部請求。 而後點 佔第二個監聽按鈕,確保監昕按鈕是打開的,這表示 Charles 正在監聽 App 的網絡數據流。測試

 這時打開手機京東,注意必定要提早設置好 Charles 的代理並配置好 CA 證書,不然沒有效果。 打開任意一個商品,如 iPhone,而後打開它的商品評論頁面,spa

 

 不斷上拉加載評論,能夠看到 Charles 捕獲到這個過程當中京東 App 內發生的全部網絡請求,如圖 3d

左側列表會出現一個api.m.jd.com的連接,並且不停的山東,頗有可能就是當前app發出的獲取評論數據的請求被Charles捕獲到了。咱們點擊將其展開,繼續上拉刷新評論。隨着上拉的進行,此處又會出現一個個的網絡請求,這時新出現的數據包請求肯定就是獲取評論數據的請求。

爲了驗證肯定性,咱們點擊查看其中一個條目的詳情信息。切換到contents選項卡,這時咱們發現一些JSON數據,覈對一下結果,其中有commentdata的字段,其內容和咱們在App中看到的評論內容一致。

分析

如今分析這個請求的和響應的詳細信息。首先能夠回到Overview選項卡上,上方顯示了請求的URL,接着是響應狀態碼,請求方式等,如圖

這個結果和本來在WEB瀏覽器開發者工具內捕獲到的結果形式是一致的

接着點擊content選項卡,查看請求和響應的詳細信息

上半部分是Request的信息,先半部分是Response的信息。好比針對Request咱們切換到Headers選項卡便可看到Request的Headers的信息。針對Response的,咱們切換到JSON TEXT的選項卡,便可看到Response的Body信息,而且該內容已經被格式化。

因爲這個請求是 POST請求,咱們還須要關心 POST 的表單信息, 切換到 Form選項卡便可查看, 如圖 

 

這樣咱們就成功抓取App 中的評論接口 的請求和響應,而且能夠查看Response返回的 JSON數據。
至於其餘 App,咱們一樣可使用這樣的方式來分析。 若是咱們能夠直接分析獲得請求的 URL 和參數的規律,直接用程序模擬便可批量抓取。

重發
Charles 還有一個強大功能,它能夠將捕獲到的請求加以修改併發送修改後的請求。 點擊上方的修 改按鈕,左側列表就多了一個以編輯圖標爲開頭的連接, 這就表明此連接對應的請求正在被咱們修改, 如圖

 

咱們能夠將Form中的某個字段進行刪除,好比這裏將partner字段進行刪除,而後點擊Remove,這時咱們已經對原來請求攜帶的FormData作了修改,而後點擊下方的Execute按鈕便可執行修改後的請求,如圖

左側列表再次出現了接口的請求結果,內容仍然不變

能夠看出刪除某些字段,並無帶來什麼影響,因此這個字段是可有可無的。

有了這個功能,咱們能夠方便的使用Charles來作調試,能夠經過修改參數、接口等來測試不一樣請求的響應狀態,就能夠知道哪些參數是必要的,那些是沒必要要的,以及參數分別有什麼規律,最後能夠獲得一個最簡單的接口和參數形式以供程序模擬調用使用

結語

 

以上內容即是經過 Charles 抓包分析 App 請求的過程。 經過 Charles,咱們成功抓取 App 中流經的 網絡數據包,捕獲原始的數據,還能夠修改原始請求和從新發起修改後的請求進行接口測試。 知道了請求和響應的具體信息,若是咱們能夠分析獲得請求的 URL 和參數的規律, 直接用程序 模擬便可批量抓取,這固然最好不過了。 可是隨着技術的發展, App 接口每每會帶有密鑰,咱們並不能直接找到這些規律,那麼怎麼辦呢?咱們將瞭解利用 Charles 和 mitmdump 直接對接 Python 腳本實時處理抓取到的 Response 的 過程。

相關文章
相關標籤/搜索