怎么在Python3中利用Fidder爬取APP
怎么在Python3中利用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后,可以再爬取所有的英雄名称,然后就可以制作我们自己的英雄攻略了==
运行结果如下:
三、完整代码
""" Version:Python3.5 Author:OniOn Time:2018/11/2621:20 """ importrequests #装备信息 EQUIP_LIST=[] #英雄信息 HERO_LIST=[] #爬取英雄信息 defget_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=[]#技能介绍 foriinjs['info']['skill_list']: desc=i['description']if'<br>'notini['description']elsei['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)) foriinskill_list: print('{}类型:{}\n技能介绍:{}'.format(i['name'],i['type'],i['desc'])) print("推荐装备:",end="") equip_choice=[]#推荐装备 all_money= foriinjs['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)) #爬取所有装备的基本信息 defget_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) foriinres.json()['list']: EQUIP_LIST.append({ 'price':i['price'], 'name':i['name'], #'equip_id':i['equip_id'] }) #爬取所有英雄的基本信息 defget_all_hero(): #英雄定位:type1-战士2-法师3-坦克4-刺客5-射手6-辅助 type_list=['战士','法师','坦克','刺客','射手','辅助'] 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) foriinres.json()['list']: HERO_LIST.append({ "name":i['name'], "id":i['hero_id'], 'type':'/'.join([type_list[int(j)-]forjini['type']]) }) if__name__=='__main__': get_all_hero() length=len(HERO_LIST) print("-"*50) foriinrange(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'])) foriinrange(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请输入您想查看的英雄id:"))
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
Python3的re.match函数语法是什么
Python3的re.match函数语法是什么这篇文章主要介绍“P...
-
Python3的re.match函数怎么用
Python3的re.match函数怎么用本篇内容主要讲解“Pyt...
-
Python3的re.search函数语法是什么
Python3的re.search函数语法是什么本文小编为大家详细...
-
Python3的re.search方法怎么用
Python3的re.search方法怎么用本篇内容主要讲解“Py...
-
Python3中re.match与re.search的区别是什么
Python3中re.match与re.search的区别是什么本...
-
Python3中SMTP的语法是什么
Python3中SMTP的语法是什么本文小编为大家详细介绍“Pyt...
-
怎么在Python3中使用OpenCV实现实时摄像头人脸检测
-
python3(scrapy框架的执行流程)
-
Python3 A*寻路算法的示例分析
-
使用Python3怎么实现一个三级菜单功能