经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
Python3爬虫使用Fidder实现APP爬取示例
来源:jb51  时间:2018/11/28 9:31:09  对本文有异议

之前爬取都是网页上的数据,今天要来说一下怎么借助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. Time: 2018/11/26 21:20
  5. """
  6. import requests
  7. # 装备信息
  8. EQUIP_LIST = []
  9. # 英雄信息
  10. HERO_LIST = []
  11. # 爬取英雄信息
  12. def get_hero(hero_id):
  13. 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(
  14. hero_id)
  15. res = requests.post(url)
  16. js = res.json()
  17. img_url = js['info']['big_img']
  18. skill_tips = js['info']['skill_tips'] # 使用技巧
  19. skill_list = [] # 技能介绍
  20. for i in js['info']['skill_list']:
  21. desc = i['description'] if '<br>' not in i['description'] else i['description'].replace('<br>', '')
  22. skill_list.append({
  23. "name": i['name'] + "({})".format(i['intro']),
  24. "type": i['tags'],
  25. "desc": desc
  26. })
  27. print("英雄图片链接:{}".format(img_url))
  28. print("英雄使用技巧:{}".format(skill_tips))
  29. for i in skill_list:
  30. print('{} 类型:{} \n技能介绍:{}'.format(i['name'], i['type'], i['desc']))
  31. print("推荐装备:", end="")
  32. equip_choice = [] # 推荐装备
  33. all_money =
  34. for i in js['info']['equip_choice'][]['list']:
  35. equip_choice.append(EQUIP_LIST[int(i['equip_id'])]['name'])
  36. all_money += int(EQUIP_LIST[int(i['equip_id'])]['price'])
  37. print(' '.join(equip_choice), " (装备总金额:{})".format(all_money))
  38. # 爬取所有装备的基本信息
  39. def get_all_equip():
  40. 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"
  41. res = requests.get(url)
  42. for i in res.json()['list']:
  43. EQUIP_LIST.append({
  44. 'price': i['price'],
  45. 'name': i['name'],
  46. # 'equip_id': i['equip_id']
  47. })
  48. # 爬取所有英雄的基本信息
  49. def get_all_hero():
  50. # 英雄定位: type 1-战士 2-法师 3-坦克 4-刺客 5-射手 6-辅助
  51. type_list = ['战士', '法师', '坦克', '刺客', '射手', '辅助']
  52. 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"
  53. res = requests.get(url)
  54. for i in res.json()['list']:
  55. HERO_LIST.append({
  56. "name": i['name'],
  57. "id": i['hero_id'],
  58. 'type': '/'.join([type_list[int(j) - ] for j in i['type']])
  59. })
  60. if __name__ == '__main__':
  61. get_all_hero()
  62. length = len(HERO_LIST)
  63. print("-" * 50)
  64. for i in range(0, length // 5 * 5, 5):
  65. print('{}(id:{}) '.format(HERO_LIST[i]['name'], HERO_LIST[i]['id']), end=' ')
  66. print('{}(id:{}) '.format(HERO_LIST[i + 1]['name'], HERO_LIST[i + 1]['id']), end=' ')
  67. print('{}(id:{}) '.format(HERO_LIST[i + 2]['name'], HERO_LIST[i + 2]['id']), end=' ')
  68. print('{}(id:{}) '.format(HERO_LIST[i + 3]['name'], HERO_LIST[i + 3]['id']), end=' ')
  69. print('{}(id:{}) '.format(HERO_LIST[i + 4]['name'], HERO_LIST[i + 4]['id']))
  70. for i in range(length // 5 * 5, length):
  71. print('{}(id:{}) '.format(HERO_LIST[i]['name'], HERO_LIST[i]['id']), end=' ')
  72. print('\n', "-" * 50)
  73. get_all_equip()
  74. get_hero(input("\n请输入您想查看的英雄id:"))

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号