python 手機app數據爬取

今天向你們介紹app爬取。
@python

一:爬取主要流程簡述

1.APP的爬取比Web爬取更加容易,反爬蟲沒有那麼強,且大部分數據是以JSON形式傳輸的,解析簡單。android

2.在APP中想要查看請求與響應(相似瀏覽器的開發者工具監聽到的各個網絡請求和響應),就須要藉助抓包軟件。c++

3.在抓取以前,須要設置代理將手機處於抓包軟件的監聽下,就能夠用同一網絡進行監聽,得到全部的網絡和請求。git

4.若是是有規則的,就只須要分析便可;若是沒有規律,就能夠用另外一個工具mitmdump對接Python腳本直接處理Response。github

5.抓取確定不能由人手動完成,還須要作到自動化,還要對App進行自動化控制,能夠用庫Appium。


web

二:抓包工具Charles

1.Charles的使用

   Charles是一個網絡抓包工具,比Fiddler功能更強大,能夠進行分析移動App的數據包,獲取全部的網絡請求和網絡內容

數據庫

2.安裝

(1)安裝連接

   官網:https://www.charlesproxy.comjson

(2)須知

   charles是收費軟件,但能夠免費試用30天。試用期過了,還能夠試用,不過每次試用不能超過30分鐘,啓動有10秒的延遲,但大部分還可使用。windows

(3)安裝後

在這裏插入圖片描述

3.證書配置

(1)證書配置說明

   如今不少網頁都在向HTTPS(超文本傳輸協議的加密版,即HTTP加入SSL層),通過SSL加密更加安全,真實,大部分都由CA機構頒發安全簽章(12306不是CA機構頒發,但不被信任)。如今應用HTTPS協議的App通訊數據都會是加密的,常規的截包方法是沒法識別請求內部的數據的。
   要抓取APP端的數據,要在PC和手機端都安裝證書。

(2)windows系統安裝證書配置

   打開Charles,點擊Help->SSL Proxying->Install Charles Root Certificate,進入證書的安裝頁面:
在這裏插入圖片描述
   點擊安裝證書,就會打開證書安裝嚮導,而後點擊下一步,此時須要選擇證書的存儲區域,選擇第二個選項」將全部證書放入下列存儲」:
在這裏插入圖片描述
   而後點擊瀏覽,選擇證書存儲位置爲」受信任的根證書頒發機構」,點擊確認並進入下一步:
在這裏插入圖片描述

(3)Android手機安裝證書配置

手機與電腦鏈接同一個WiFi。
設置以下:
能夠用操做系統命令ipconfig查看PC端ip:

在這裏插入圖片描述
   爲10.61.131.172,默認代理端口號爲8888。以後代理服務器爲電腦的IP地址。端口爲8888。設置以下:
在這裏插入圖片描述
會發現360手機的標誌
在這裏插入圖片描述
接下來對手機下載證書:
訪問手機訪問 chls.pro/ssl ,下載證書:
在這裏插入圖片描述
   此時下載的是個.pem 格式的。須要手動更改成.crt 格式,最後隨便放進某個文件夾便可:
在這裏插入圖片描述
用手機(我用的360手機)設置裏的安全,找到從存儲設備安裝找到該crt文件進行配置:
在這裏插入圖片描述
此時須要設置鎖屏:
在這裏插入圖片描述
就能夠完成證書的安裝。

4.開啓SSL監聽

   點擊Proxy->SSLProxying Settings,在彈出的窗口中點擊Add按鈕,添加須要監聽的地址和端口號。須要監聽全部的HTTPS請求,能夠直接將地址和端口設置爲,即添加:*設置,就能夠抓取全部的HTTPS請求包;若是不配置,抓取的HTTPS請求包狀態多是unknown。
在這裏插入圖片描述
在這裏插入圖片描述
這樣就指定只監聽咱們須要的ip和端口的請求和響應。

5.原理

   Charles運行時會在PC端的8888開啓一個代理服務,其實是一個HTTP/HTTPS的代理。
   能夠是用手機經過相同的無線網絡鏈接(這裏用的是校園網),設置手機代理爲Charles的代理地址,這樣手機訪問互聯網的數據就會通過Charles抓包工具,Charles轉發這些數據到真實的服務器,再轉發到手機中。這樣抓包工具(Charles)就起到了中間人的做用,還有權對請求和響應進行修改。

6.抓包

   咱們能夠看到咱們已經請求了不少數據了,點擊左上角的掃帚按鈕便可清空捕獲到的全部請求,而後點擊第二個監聽按鈕,代表Charles正在監聽App的網絡數據流。以下:
在這裏插入圖片描述
抓包後能夠看到音樂:
在這裏插入圖片描述
   能夠經過分析不一樣的URL請求,得到數據,也能夠經過修改數據,獲得那些參數是須要的。
在這裏插入圖片描述
   這是有規則的,無規則的若是沒有規律的url,就能夠用另外一個工具mitmdump對接Python腳本直接處理Response。



三:抓包工具mitmproxy(免費的)

1.簡介

   mitmproxy是一個支持HTTP和HTTPS的抓包程序,有相似Fiddler和Charles的功能,但它是一個控制檯的形式操做。

2.關聯組件

   mirmproxy還有兩個關聯組件。一個是mitmdump,是命令行接口,能夠對接Python腳本,用Python處理數據;另外一個是mitmweb,是一個web程序,能夠清楚地查看mitmproxy捕獲的請求。

3.安裝和證書配置

(1)用pip安裝

   這個是安裝python後就有的安裝方法,也是最簡單的安裝方法,在控制檯輸入
   Pip install mitmproxy便可,會自動安裝mitmdump和mitmweb組件:
在這裏插入圖片描述
可是到最後安裝會失敗:
在這裏插入圖片描述
   是由於安裝這個包的 window 系統須要首先安裝 Microsoft Visual C++ V14.0以上 才行。
   能夠在https://visualstudio.microsoft.com/downloads/
直接下載便可,安裝以後須要c++的庫之類的東西都安裝了,而後再在命令行進行安裝 mitmproxy便可:
在這裏插入圖片描述
而後進入安裝目錄,咱們選擇第三個:
在這裏插入圖片描述
在「安裝 Visual Studio」屏幕中找到所需的工做負載,選擇"使用的桌面開發C++"工做負荷:
注:這裏的文件太大,我直接安裝到E盤。
在這裏插入圖片描述
以後再安裝就能夠安裝成功了:
在這裏插入圖片描述

(2)在GitHub或官網上安裝

GitHub:https://github.com/mitmproxy/mitmproxy
官網:https://mitmproxy.org
下載地址:https://github.com/mitmproxy/mitmproxy/releases

3.證書配置

(1) 產生CA證書

   對於mitmproxy來講,若是想要截獲HTTPS請求,也須要設置證書。它在安裝後會提供一套CA證書,只要客戶端信任了mitmproxy的證書,就能夠經過mitmproxy獲取HTTPS請求的具體內容,不然沒法解析HTTPS請求。
   在cmd中輸入命令行接口命令mitmdump,產生CA證書,在用戶目錄找到CA證書:
在這裏插入圖片描述
在這裏插入圖片描述
這裏的目錄能夠自行指定,但必須是在第一次運行mimdump時。
(2)PC端安裝
   電腦是Window系統,所以用mitmproxy-ca.p12,雙擊後出現導入證書的引導頁:
在這裏插入圖片描述
點擊下一步,不須要設置密碼:
在這裏插入圖片描述
接下來點擊下一步,須要選擇證書的存儲區域,和配置Charles同樣:
在這裏插入圖片描述
最後會有警告,選擇是便可,證書就安裝到咱們的電腦上了:
在這裏插入圖片描述
在這裏插入圖片描述
(3)手機端安裝
   個人手機是Android系統,直接把mitmproxy-ca.pem文件發送到手機上便可。
   配置方法和Charles相似。HTTPS請求。
   手動更改成.crt 格式,最後隨便放進某個文件夾便可,用手機(我用的360手機)設置裏的安全,找到從存儲設備安裝找到該crt文件進行配置:
在這裏插入圖片描述
在這裏插入圖片描述

4.抓包原理

   在mitmproxy中,會在PC端的8080端口運行,而後開啓一個代理服務,就是一個HTTP/HTTPS代理,相似ip代理。
   手機和PC在同一局域網內,設置代理爲mitmproxy的代理地址,抓包工具mitmproxy就至關於中間人的做用,數據就會流經抓包工具。這個過程還能夠對接mitmdump,抓取到的請求和響應均可以直接用Python來處理,而後分析,存到本地,或存到數據庫。

5.設置代理

   在抓包前須要先設手機局域網置代理爲抓包工具mitmproxy代理。

(1)啓動代理服務

   在cmd中輸入mitmproxy,會在8080端口運行一個代理服務,因爲該命令不支持Windows系統,所以在Windows系統中用mitmdump命令:
在這裏插入圖片描述
用mitmdump啓動代理服務,監聽8080端口:
在這裏插入圖片描述

(2)設置當前代理

   將手機和電腦連到同一局域網下,先用操做系統命令ipconfig查看PC端當前局域網的ip:
在這裏插入圖片描述
爲10.61.131.172,在手機端設置代理以下:
在這裏插入圖片描述
這樣就配置好了mitmproxy的代理。

6.抓包

   運行mitmweb(因爲mitmproxy不能用),就能夠看到手機上的全部請求:
在這裏插入圖片描述
網頁呈現以下:
在這裏插入圖片描述
   隨便打開一條網絡請求,發現和在網頁的開發者工具下,監聽到的同樣:
在這裏插入圖片描述
在這裏插入圖片描述

7.mitmproxy的高級功能mitmdump

   上面的功能與方法在Fiddler和Charles中也有,那麼mitmproxy的優點何在?
   在mitmproxy中它的強大致現到mitmdump工具,能夠對接Python對數據請求進行處理。
   它是mitmproxy的命令行接口,能夠對接python程序對請求進行處理,不須要手動截取和分析HTTP請求和響應,進行數據存儲和解析均可以經過Python來完成。

(1)簡單獲取數據(隨便一個app)

咱們先建立一個文件夾:
在這裏插入圖片描述
而後打開轉到該文件夾下:
在這裏插入圖片描述
   輸入mitmdump -w outfile(outfile名稱和擴展名能夠自定義,文件放到當前cmd打開目錄下,也能夠用絕對相對路徑,但比較麻煩):
截取廣播頁面:
在這裏插入圖片描述
在這裏插入圖片描述
以後把截獲的數據保存到文件夾下:
在這裏插入圖片描述
打開文件,發現好多亂碼:
在這裏插入圖片描述
下面會對其進行處理。

(2)能夠指定一個腳原本處理截獲的數據:

   Mitmdump -s script.py(腳本名字能夠自定義),須要放在cmd當前目錄下,也能夠用絕對相對路徑,但比較麻煩。
寫入以下代碼:
在這裏插入圖片描述
   就是定義了一個request()方法,參數爲url,實際上是一個HTTPFlow對象,經過request屬性便可獲取到當前請求對象。而後打印出請求頭,將User-Agent(用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器可以識別客戶使用的操做系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言瀏覽器插件等)修改成MitmProxy。
運行以後手機端訪問http://httpbin.org/get,能夠看到請求頭:
在這裏插入圖片描述
PC端以下:
在這裏插入圖片描述
   手機端請求的Headers實際上就是請求的Headers,User-Agent被修改爲了mitmproxy(防反爬),PC端顯示修改後的Headers內容,其User-Agent正是MitProxy。
   這樣就可讓服務器識別不出咱們的是爬蟲程序了。

(3)日誌輸出

   mitmdump提供了專門的日誌輸出功能,就是設定輸出到控制檯的顏色,能夠分別爲不一樣級別配置不一樣的顏色,更加直觀:
在這裏插入圖片描述
效果以下:
在這裏插入圖片描述

(4)輸出請求數據

   能夠輸出一些請求信息,好比請求鏈接(url),請求頭(headers),請求Cookies(cookies),請求Host(host),請求方法(method),請求端口(port),請求協議(scheme)等。
   還能夠把這些請求的信息進行修改後,再發送到服務器中,這樣,服務器返回的可能不是app想請求的網頁,這就是爲何一些app打開後卻訪問到了其餘網址的緣由。
   也能夠經過該用法,經過修改Cookies,添加代理等方式來儘量避免反爬。
這裏就先進行略過。

(5)得到響應

   響應就是請求後服務器返回的信息,也就是咱們須要的,大部分是json格式文件。
   對於json格式文件,mitmdump也提供了對應的處理接口,就是response()方法。
   咱們能夠打印各個http/https請求的響應內容,不過text纔是咱們想要的json格式文件,也能夠用content,不過返回的是二進制文件。
代碼以下:
在這裏插入圖片描述
咱們先試一下:
在這裏插入圖片描述
內容有些亂,接下來咱們就進行分析獲得咱們須要的數據。



四:利用mitmproxy進行app數據獲取

1.獲取請求url

獲取http/https請求url,也能夠認爲是接口:
修改python文件,得到請求的url:
在這裏插入圖片描述
而後停留在該頁面:
在這裏插入圖片描述
會發現出現了好多url:
在這裏插入圖片描述
咱們一一分析一下,發現接口信息分別是:
這個接口
https://images.sanmaoyou.com/img/new_images/5ac83890033ec.jpg
是GET請求獲取文件:
在這裏插入圖片描述
這個接口的爲json文件,爲GET獲取方式:
在這裏插入圖片描述
在這裏插入圖片描述
這個接口
https://images.sanmaoyou.com/audio/library/2018-04/5ac83887c5263.mp3
是下載音樂,爲GET獲取方式:
在這裏插入圖片描述
這個接口
http://sdk-open-phone.getui.com/api.php?format=json&t=1&d=76060FDC1EFFF74C1956225F1DBEE6AF006578C33658C4AF90D802512BF321C8&k=2是POST方式,是傳文件。
咱們在向右點擊下一個廣播,進行驗證:
在這裏插入圖片描述
   發現基本上,新打開一個廣播後,會加載mp3文件,圖片文件,比較長的接口就返回json文件:
在這裏插入圖片描述

2.接口url文件

把接口保存到txt文件中:
在這裏插入圖片描述
發現只有很長的接口才返回json文件。所以下面就須要對這些接口進行篩選。

3.爬取json

代碼在pa_qu_json.py文件中,須要先建立一個json爬取數據文件夾,爬取後的結果以下:
在這裏插入圖片描述
在這裏插入圖片描述

接下來用Python處理便可,這裏只是簡單爬取。在實際應用中,不是人工的,是用代碼自動化進行分析各個請求和響應進行爬取。這裏有個跨平臺的移動端自動化測試工具,能夠很方便地進行自動化爬取,在下一個爬蟲博客中會詳細講到,但願你們把寶貴意見提出來一塊兒學習進步。

相關文章
相關標籤/搜索