码迷,mamicode.com
首页 > 移动开发 > 详细

【Python3爬虫】使用Fidder实现APP爬取

时间:2018-11-27 14:46:06      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:抓包   安装完成   127.0.0.1   xiaomi   format   不同   NPU   记录   def   

之前爬取都是网页上的数据,今天要来说一下怎么借助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爬取

标签:抓包   安装完成   127.0.0.1   xiaomi   format   不同   NPU   记录   def   

原文地址:https://www.cnblogs.com/TM0831/p/10025662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!