Python3爬虫使用Fidder实现APP爬取示例


Posted in Python onNovember 27, 2018

之前爬取都是网页上的数据,今天要来说一下怎么借助Fidder来爬取手机APP上的数据。

一、环境配置

1、Fidder的安装和配置

没有安装Fidder软件的可以进入 这个网址 下载,然后就是傻瓜式的安装,安装步骤很简单。在安装完成后,打开软件,进行如下设置:

Python3爬虫使用Fidder实现APP爬取示例

Python3爬虫使用Fidder实现APP爬取示例

这里使用默认的8888端口就好了,如果要修改的话,要避免和其他端口冲突。

2、手机的配置

首先打开cmd,输入ipconfig查看IP地址,记录下这个IP地址:

Python3爬虫使用Fidder实现APP爬取示例

想要使用FIdder进行手机抓包,要让手机和PC处在同一个内网中,方法就是连接同一个无线网络。然后打开手机,进入Wi-FI设置修改代理为手动代理,再把上面的IP地址和8888端口号输入进去:

Python3爬虫使用Fidder实现APP爬取示例

然后打开浏览器,输入http://127.0.0.1:8888,会看到如下界面,点击FidderRoot certificate下载证书:

Python3爬虫使用Fidder实现APP爬取示例

下载好之后如果出现无法安装的情况,可以进入设置进行手动安装证书,我的安装步骤是“设置->系统安全->从SD卡安装”,不同的手机安装步骤不同,不过也差不多吧。

3、抓包测试

在完成上面的步骤之后,我们先进行一下抓包测试,打开手机的浏览器,然后打开百度的网页,可以看到出现了对应的包,这样就可以进行之后的抓取了。

Python3爬虫使用Fidder实现APP爬取示例

二、抓取步骤

这次使用的APP是王者荣耀盒子,打开APP,点击英雄,可以看到第一个英雄-上官婉儿,然后点进去。

Python3爬虫使用Fidder实现APP爬取示例

然后在Fidder中可以找到如下这个包:

Python3爬虫使用Fidder实现APP爬取示例

然后在右侧可以看到如下信息:

Python3爬虫使用Fidder实现APP爬取示例

把这些信息复制一下,然后解码一下就可以看到如下数据了,包括英雄名字、英雄图片、英雄技能等信息:

Python3爬虫使用Fidder实现APP爬取示例

但是在推荐装备的信息里,只有装备的id值,却没有装备的名字,那我们要怎么获得这些装备的名字呢?还是同样的办法,点击查看所有装备,然后抓包,找到对应的包,再进行爬取。在获得所有的装备和对应的id后,可以再爬取所有的英雄名称,然后就可以制作我们自己的英雄攻略了==

运行结果如下:

Python3爬虫使用Fidder实现APP爬取示例

三、完整代码

"""
 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:"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详细解读tornado协程(coroutine)原理
Jan 15 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python实现App自动签到领取积分功能
Sep 29 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
Python字符串的一些操作方法总结
Jun 10 Python
Python八皇后问题解答过程详解
Jul 29 Python
python可迭代对象去重实例
May 15 Python
如何教少儿学习Python编程
Jul 10 Python
python如何查看微信消息撤回
Nov 27 #Python
python中退出多层循环的方法
Nov 27 #Python
为什么Python中没有&quot;a++&quot;这种写法
Nov 27 #Python
django session完成状态保持的方法
Nov 27 #Python
Python3实现腾讯云OCR识别
Nov 27 #Python
python利用百度AI实现文字识别功能
Nov 27 #Python
python如何实现一个刷网页小程序
Nov 27 #Python
You might like
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python中强大的命令行库click入门教程
2016/12/26 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
教师求职信范文分享
2013/12/27 职场文书
记者岗位职责
2014/01/06 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
团日活动总结
2014/04/28 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
写给女朋友的保证书
2015/05/09 职场文书
教师节获奖感言
2015/07/31 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书