配置采集手機(jī)App數(shù)據(jù)和采集網(wǎng)頁(yè)數(shù)據(jù)的原理相同,需要先通過網(wǎng)絡(luò)抓包哄孤,攔截App和服務(wù)器通信的數(shù)據(jù)包歹鱼,然后找到傳輸?shù)慕涌诤蛥?shù)院仿,最后使用requests包采集數(shù)據(jù)。這中間最煩瑣的環(huán)節(jié)是攔截App和服務(wù)器通信的數(shù)據(jù)包,需要使用安卓模擬器及抓包工具,并將安卓模擬器和抓包工具連接起來;也可以直接使用安卓手機(jī)代替安卓模擬器口注,但建議使用閑置手機(jī)(不要安裝多余的應(yīng)用),如果使用自己常用的手機(jī)君珠,則數(shù)據(jù)交互頻繁容易混淆我們的觀察寝志。
App數(shù)據(jù)抓包啟動(dòng)抓包的手機(jī)和電腦上的Fiddle,在手機(jī)中打開要抓包的app策添,是在手機(jī)中打開的App中的頁(yè)面材部。
通過Fiddle可以查看到App傳輸過程的所有數(shù)據(jù)包,找到當(dāng)前排行榜的數(shù)據(jù)包唯竹。理論上乐导,當(dāng)前數(shù)據(jù)包應(yīng)該從捕獲到的列表的底部開始向上尋找,這是最快找到數(shù)據(jù)包的路徑浸颓。另外物臂,通過數(shù)據(jù)類型(JSON)、主機(jī)(Host)产上、內(nèi)容(Body)的大小也可以快速判斷目標(biāo)數(shù)據(jù)包棵磷。如下圖所示:
已經(jīng)獲取到了目標(biāo)URL,先測(cè)試是否可以在Python中獲取數(shù)據(jù)晋涣,直接使用requests.get訪問目標(biāo)URL仪媒,代碼如下:
import requests
print(requests.get('https://######.com/api/v1/game/system/pageSetting').text)
通過觀察發(fā)現(xiàn),目標(biāo)URL的參數(shù)中只有一個(gè)page參數(shù)是可以控制數(shù)據(jù)變化的參數(shù)姻僧,因此先測(cè)試是否通過改變page參數(shù)就可以讓服務(wù)器返回不同頁(yè)碼的數(shù)據(jù)规丽,代碼如下:
for i in range(1,3):
? ? ?headers = {'Identify':'69449118'}
? ? url ='https://**************.com/api/v1/game/pet/illustration?page={}&size=4'.format(i)
? ? data = requests.get(url,headers=headers)
? ? print(data.text)