Python3爬蟲(chóng)使用Fidder實(shí)現(xiàn)APP爬取示例
之前爬取都是網(wǎng)頁(yè)上的數(shù)據(jù),今天要來(lái)說(shuō)一下怎么借助Fidder來(lái)爬取手機(jī)APP上的數(shù)據(jù)。
一、環(huán)境配置
1、Fidder的安裝和配置
沒(méi)有安裝Fidder軟件的可以進(jìn)入 這個(gè)網(wǎng)址 下載,然后就是傻瓜式的安裝,安裝步驟很簡(jiǎn)單。在安裝完成后,打開(kāi)軟件,進(jìn)行如下設(shè)置:


這里使用默認(rèn)的8888端口就好了,如果要修改的話(huà),要避免和其他端口沖突。
2、手機(jī)的配置
首先打開(kāi)cmd,輸入ipconfig查看IP地址,記錄下這個(gè)IP地址:

想要使用FIdder進(jìn)行手機(jī)抓包,要讓手機(jī)和PC處在同一個(gè)內(nèi)網(wǎng)中,方法就是連接同一個(gè)無(wú)線(xiàn)網(wǎng)絡(luò)。然后打開(kāi)手機(jī),進(jìn)入Wi-FI設(shè)置修改代理為手動(dòng)代理,再把上面的IP地址和8888端口號(hào)輸入進(jìn)去:

然后打開(kāi)瀏覽器,輸入http://127.0.0.1:8888,會(huì)看到如下界面,點(diǎn)擊FidderRoot certificate下載證書(shū):

下載好之后如果出現(xiàn)無(wú)法安裝的情況,可以進(jìn)入設(shè)置進(jìn)行手動(dòng)安裝證書(shū),我的安裝步驟是“設(shè)置->系統(tǒng)安全->從SD卡安裝”,不同的手機(jī)安裝步驟不同,不過(guò)也差不多吧。
3、抓包測(cè)試
在完成上面的步驟之后,我們先進(jìn)行一下抓包測(cè)試,打開(kāi)手機(jī)的瀏覽器,然后打開(kāi)百度的網(wǎng)頁(yè),可以看到出現(xiàn)了對(duì)應(yīng)的包,這樣就可以進(jìn)行之后的抓取了。

二、抓取步驟
這次使用的APP是王者榮耀盒子,打開(kāi)APP,點(diǎn)擊英雄,可以看到第一個(gè)英雄-上官婉兒,然后點(diǎn)進(jìn)去。

然后在Fidder中可以找到如下這個(gè)包:

然后在右側(cè)可以看到如下信息:

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

但是在推薦裝備的信息里,只有裝備的id值,卻沒(méi)有裝備的名字,那我們要怎么獲得這些裝備的名字呢?還是同樣的辦法,點(diǎn)擊查看所有裝備,然后抓包,找到對(duì)應(yīng)的包,再進(jìn)行爬取。在獲得所有的裝備和對(duì)應(yīng)的id后,可以再爬取所有的英雄名稱(chēng),然后就可以制作我們自己的英雄攻略了==
運(yùn)行結(jié)果如下:

三、完整代碼
"""
Version: Python3.5
Author: OniOn
Time: 2018/11/26 21:20
"""
import requests
# 裝備信息
EQUIP_LIST = []
# 英雄信息
HERO_LIST = []
# 爬取英雄信息
def get_hero(hero_id):
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(
hero_id)
res = requests.post(url)
js = res.json()
img_url = js['info']['big_img']
skill_tips = js['info']['skill_tips'] # 使用技巧
skill_list = [] # 技能介紹
for i in js['info']['skill_list']:
desc = i['description'] if '<br>' not in i['description'] else i['description'].replace('<br>', '')
skill_list.append({
"name": i['name'] + "({})".format(i['intro']),
"type": i['tags'],
"desc": desc
})
print("英雄圖片鏈接:{}".format(img_url))
print("英雄使用技巧:{}".format(skill_tips))
for i in skill_list:
print('{} 類(lèi)型:{} \n技能介紹:{}'.format(i['name'], i['type'], i['desc']))
print("推薦裝備:", end="")
equip_choice = [] # 推薦裝備
all_money =
for i in js['info']['equip_choice'][]['list']:
equip_choice.append(EQUIP_LIST[int(i['equip_id'])]['name'])
all_money += int(EQUIP_LIST[int(i['equip_id'])]['price'])
print(' '.join(equip_choice), " (裝備總金額:{})".format(all_money))
# 爬取所有裝備的基本信息
def get_all_equip():
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"
res = requests.get(url)
for i in res.json()['list']:
EQUIP_LIST.append({
'price': i['price'],
'name': i['name'],
# 'equip_id': i['equip_id']
})
# 爬取所有英雄的基本信息
def get_all_hero():
# 英雄定位: type 1-戰(zhàn)士 2-法師 3-坦克 4-刺客 5-射手 6-輔助
type_list = ['戰(zhàn)士', '法師', '坦克', '刺客', '射手', '輔助']
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"
res = requests.get(url)
for i in res.json()['list']:
HERO_LIST.append({
"name": i['name'],
"id": i['hero_id'],
'type': '/'.join([type_list[int(j) - ] for j in i['type']])
})
if __name__ == '__main__':
get_all_hero()
length = len(HERO_LIST)
print("-" * 50)
for i in range(0, length // 5 * 5, 5):
print('{}(id:{}) '.format(HERO_LIST[i]['name'], HERO_LIST[i]['id']), end=' ')
print('{}(id:{}) '.format(HERO_LIST[i + 1]['name'], HERO_LIST[i + 1]['id']), end=' ')
print('{}(id:{}) '.format(HERO_LIST[i + 2]['name'], HERO_LIST[i + 2]['id']), end=' ')
print('{}(id:{}) '.format(HERO_LIST[i + 3]['name'], HERO_LIST[i + 3]['id']), end=' ')
print('{}(id:{}) '.format(HERO_LIST[i + 4]['name'], HERO_LIST[i + 4]['id']))
for i in range(length // 5 * 5, length):
print('{}(id:{}) '.format(HERO_LIST[i]['name'], HERO_LIST[i]['id']), end=' ')
print('\n', "-" * 50)
get_all_equip()
get_hero(input("\n請(qǐng)輸入您想查看的英雄id:"))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python數(shù)據(jù)抓取爬蟲(chóng)代理防封IP方法
- Nginx利用Lua+Redis實(shí)現(xiàn)動(dòng)態(tài)封禁IP的方法
- 詳解Linux防火墻iptables禁IP與解封IP常用命令
- Python3爬蟲(chóng)全國(guó)地址信息
- python爬蟲(chóng)獲取小區(qū)經(jīng)緯度以及結(jié)構(gòu)化地址
- Python3爬蟲(chóng)之urllib攜帶cookie爬取網(wǎng)頁(yè)的方法
- python爬蟲(chóng)獲取新浪新聞教學(xué)
- Python3爬蟲(chóng)教程之利用Python實(shí)現(xiàn)發(fā)送天氣預(yù)報(bào)郵件
- Python3爬蟲(chóng)學(xué)習(xí)之應(yīng)對(duì)網(wǎng)站反爬蟲(chóng)機(jī)制的方法分析
- Python3爬蟲(chóng)學(xué)習(xí)入門(mén)教程
- Python反爬蟲(chóng)技術(shù)之防止IP地址被封殺的講解
相關(guān)文章
使用Python對(duì)零售商品進(jìn)行數(shù)據(jù)分析
這篇文章主要為大家介紹了使用Python對(duì)零售商品進(jìn)行數(shù)據(jù)分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python實(shí)現(xiàn)圖像識(shí)別的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)圖像識(shí)別的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
python判斷一個(gè)數(shù)是否能被另一個(gè)整數(shù)整除的實(shí)例
今天小編就為大家分享一篇python判斷一個(gè)數(shù)是否能被另一個(gè)整數(shù)整除的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
詳解Python執(zhí)行py文件是否需要可執(zhí)行權(quán)限
這篇文章主要通過(guò)幾個(gè)案例為大家詳細(xì)介紹一下在Python中執(zhí)行py文件是否需要可執(zhí)行權(quán)限,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以了解一下2023-03-03
Python實(shí)現(xiàn)定時(shí)任務(wù)的九種方案總結(jié)
定時(shí)任務(wù)是編程中常見(jiàn)的需求,它可以按照預(yù)定的時(shí)間表執(zhí)行特定的任務(wù)或操作,在Python中,有多種方法可以實(shí)現(xiàn)定時(shí)任務(wù),下面小編就來(lái)和大家詳細(xì)講講吧2023-11-11
Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫(xiě)入效率實(shí)現(xiàn)
本文主要介紹了Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫(xiě)入效率實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
python函數(shù)enumerate,operator和Counter使用技巧實(shí)例小結(jié)
這篇文章主要介紹了python函數(shù)enumerate,operator和Counter使用技巧,結(jié)合實(shí)例形式總結(jié)分析了python內(nèi)置函數(shù)enumerate,operator和Counter基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
Python閉包之返回函數(shù)的函數(shù)用法示例
這篇文章主要介紹了 Python閉包之返回函數(shù)的函數(shù)用法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
python讀取mat文件生成h5文件的實(shí)現(xiàn)
這篇文章主要介紹了python讀取mat文件生成h5文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

