1. 程式人生 > >【Python3爬蟲】使用Fidder實現APP爬取

【Python3爬蟲】使用Fidder實現APP爬取

telerik tail 實現 鏈接 端口號 dpi () vco 軟件

之前爬取都是網頁上的數據,今天要來說一下怎麽借助Fidder來爬取手機APP上的數據。

一、環境配置

1、Fidder的安裝和配置

沒有安裝Fidder軟件的可以進入這個網址下載,然後就是傻瓜式的安裝,安裝步驟很簡單。在安裝完成後,打開軟件,進行如下設置:

技術分享圖片

技術分享圖片

這裏使用默認的8888端口就好了,如果要修改的話,要避免和其他端口沖突。

2、手機的配置

首先打開cmd,輸入ipconfig查看IP地址,記錄下這個IP地址:

技術分享圖片

想要使用FIdder進行手機抓包,要讓手機和PC處在同一個內網中,方法就是連接同一個無線網絡。然後打開手機,進入Wi-FI設置修改代理為手動代理,再把上面的IP地址和8888端口號輸入進去:

技術分享圖片

然後打開瀏覽器,輸入http://127.0.0.1:8888,會看到如下界面,點擊FidderRoot certificate下載證書:

技術分享圖片

下載好之後如果出現無法安裝的情況,可以進入設置進行手動安裝證書,我的安裝步驟是“設置->系統安全->從SD卡安裝”,不同的手機安裝步驟不同,不過也差不多吧。

3、抓包測試

在完成上面的步驟之後,我們先進行一下抓包測試,打開手機的瀏覽器,然後打開百度的網頁,可以看到出現了對應的包,這樣就可以進行之後的抓取了。

技術分享圖片

二、抓取步驟

這次使用的APP是王者榮耀盒子,打開APP,點擊英雄,可以看到第一個英雄-上官婉兒,然後點進去。

技術分享圖片

然後在Fidder中可以找到如下這個包:

技術分享圖片

然後在右側可以看到如下信息:

技術分享圖片

把這些信息復制一下,然後解碼一下就可以看到如下數據了,包括英雄名字、英雄圖片、英雄技能等信息:

技術分享圖片

但是在推薦裝備的信息裏,只有裝備的id值,卻沒有裝備的名字,那我們要怎麽獲得這些裝備的名字呢?還是同樣的辦法,點擊查看所有裝備,然後抓包,找到對應的包,再進行爬取。在獲得所有的裝備和對應的id後,可以再爬取所有的英雄名稱,然後就可以制作我們自己的英雄攻略了==

運行結果如下:

技術分享圖片

三、完整代碼

 1 """
 2 Version: Python3.5
 3 Author: OniOn
 4 Site: http://www.cnblogs.com/TM0831/
 5
Time: 2018/11/26 21:20 6 """ 7 import requests 8 9 # 裝備信息 10 EQUIP_LIST = [] 11 # 英雄信息 12 HERO_LIST = [] 13 14 15 # 爬取英雄信息 16 def get_hero(hero_id): 17 url = "http://gamehelper.gm825.com/wzry/hero/detail?hero_id={}&channel_id=90009a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.4.0&version_code=13040&cuid=192384A3D29A295307CA7B96762D3911&ovr=6.0.1&device=Xiaomi_Redmi+4X&net_type=1&client_id=&info_ms=&info_ma=Z6OSFnQs6mXn4axI72A6yENV6NHXHBW%2FwZ6YjXKCGko%3D&mno=0&info_la=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&info_ci=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&mcc=0&clientversion=13.0.4.0&bssid=bFL4zw1N%2FGL43totbQy7Q9D8UfrPgiMUFRNSpM25pnY%3D&os_level=23&os_id=a2aa922677827ab1&resolution=720_1280&dpi=320&client_ip=10.12.88.95&pdunid=257ed0277cf4".format( 18 hero_id) 19 res = requests.post(url) 20 js = res.json() 21 img_url = js[info][big_img] 22 skill_tips = js[info][skill_tips] # 使用技巧 23 skill_list = [] # 技能介紹 24 for i in js[info][skill_list]: 25 desc = i[description] if <br> not in i[description] else i[description].replace(<br>, ‘‘) 26 skill_list.append({ 27 "name": i[name] + "({})".format(i[intro]), 28 "type": i[tags], 29 "desc": desc 30 }) 31 print("英雄圖片鏈接:{}".format(img_url)) 32 print("英雄使用技巧:{}".format(skill_tips)) 33 for i in skill_list: 34 print({} 類型:{} \n技能介紹:{}.format(i[name], i[type], i[desc])) 35 print("推薦裝備:", end="") 36 equip_choice = [] # 推薦裝備 37 all_money = 0 38 for i in js[info][equip_choice][0][list]: 39 equip_choice.append(EQUIP_LIST[int(i[equip_id])][name]) 40 all_money += int(EQUIP_LIST[int(i[equip_id])][price]) 41 print( .join(equip_choice), " (裝備總金額:{})".format(all_money)) 42 43 44 # 爬取所有裝備的基本信息 45 def get_all_equip(): 46 url = "http://gamehelper.gm825.com/wzry/equip/list?channel_id=90009a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.4.0&version_code=13040&cuid=192384A3D29A295307CA7B96762D3911&ovr=6.0.1&device=Xiaomi_Redmi+4X&net_type=1&client_id=&info_ms=&info_ma=Z6OSFnQs6mXn4axI72A6yENV6NHXHBW%2FwZ6YjXKCGko%3D&mno=0&info_la=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&info_ci=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&mcc=0&clientversion=13.0.4.0&bssid=bFL4zw1N%2FGL43totbQy7Q9D8UfrPgiMUFRNSpM25pnY%3D&os_level=23&os_id=a2aa922677827ab1&resolution=720_1280&dpi=320&client_ip=10.12.88.95&pdunid=257ed0277cf4" 47 res = requests.get(url) 48 for i in res.json()[list]: 49 EQUIP_LIST.append({ 50 price: i[price], 51 name: i[name], 52 # ‘equip_id‘: i[‘equip_id‘] 53 }) 54 55 56 # 爬取所有英雄的基本信息 57 def get_all_hero(): 58 # 英雄定位: type 1-戰士 2-法師 3-坦克 4-刺客 5-射手 6-輔助 59 type_list = [戰士, 法師, 坦克, 刺客, 射手, 輔助] 60 url = "http://gamehelper.gm825.com/wzry/hero/list?channel_id=90009a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.4.0&version_code=13040&cuid=192384A3D29A295307CA7B96762D3911&ovr=6.0.1&device=Xiaomi_Redmi+4X&net_type=1&client_id=&info_ms=&info_ma=Z6OSFnQs6mXn4axI72A6yENV6NHXHBW%2FwZ6YjXKCGko%3D&mno=0&info_la=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&info_ci=zdisjKfT0Zj1UXN2un%2BlyA%3D%3D&mcc=0&clientversion=13.0.4.0&bssid=bFL4zw1N%2FGL43totbQy7Q9D8UfrPgiMUFRNSpM25pnY%3D&os_level=23&os_id=a2aa922677827ab1&resolution=720_1280&dpi=320&client_ip=10.12.88.95&pdunid=257ed0277cf4" 61 res = requests.get(url) 62 for i in res.json()[list]: 63 HERO_LIST.append({ 64 "name": i[name], 65 "id": i[hero_id], 66 type: /.join([type_list[int(j) - 1] for j in i[type]]) 67 }) 68 69 70 if __name__ == __main__: 71 get_all_hero() 72 length = len(HERO_LIST) 73 print("-" * 50) 74 for i in range(0, length // 5 * 5, 5): 75 print({}(id:{}) .format(HERO_LIST[i][name], HERO_LIST[i][id]), end= ) 76 print({}(id:{}) .format(HERO_LIST[i + 1][name], HERO_LIST[i + 1][id]), end= ) 77 print({}(id:{}) .format(HERO_LIST[i + 2][name], HERO_LIST[i + 2][id]), end= ) 78 print({}(id:{}) .format(HERO_LIST[i + 3][name], HERO_LIST[i + 3][id]), end= ) 79 print({}(id:{}) .format(HERO_LIST[i + 4][name], HERO_LIST[i + 4][id])) 80 for i in range(length // 5 * 5, length): 81 print({}(id:{}) .format(HERO_LIST[i][name], HERO_LIST[i][id]), end= ) 82 print(\n, "-" * 50) 83 get_all_equip() 84 get_hero(input("\n請輸入您想查看的英雄id:"))

【Python3爬蟲】使用Fidder實現APP爬取