之前爬取都是网页上的数据,今天要来说一下怎么借助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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
"""
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 ( '{} 类型:{} \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-战士 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)
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请输入您想查看的英雄id:" ))
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/TM0831/p/10025662.html