Python爬取手机APP

之前写了一个自动签到的脚本,我姐本来让我给她写一个手机app自动签到的脚本的,后来发现自己不会爬手机app,现在抽时间找了教程,看完教程后来爬一下手机app试一试。在爬手机app时先要安装的的软件是Fiddler :

  1. 下载地址: https://pan.baidu.com/s/1dQx4-ADztgKTCK__uG7xUw 密码: r8kg
  2. 安装好Fiddler后打开.exe文件,开始配置,首先点击"tools" -> "Teletik Fiddler Options",按照下面图进行配置
  3. 打开浏览器,输入"http://localhost:8888/",点击最下方,下载证书
  4. 将下载的证书传到手机上,并进行安装

​​​​​​​

我的手机是华为nova2,安装的时候是从文件夹搜索并安装的,我也不知道为什么不能在系统安全那直接安装。

安装好证书后,修改手机WLAN的配置 ,并且手机与电脑需要保证在同一局域网中。需要修改的是 : 将所连WiFi的代理改为手动,服务器主机名一项填写自己电脑的IP地址,服务器端口一项填写8888(因为Fiddler一般默认端口是8888),然后保存。就可以开始抓包了。打开一个手机app,这里选的是王者荣耀盒子,会看到Fiddler中出现很多信息,只需挑选有用的即可 :

左边选中的链接是显示英雄页面,右下方可以对比手机页面,可以看是否将所有的英雄显示。接下来将英雄信息爬取下来 :

import requests

def main():
    headers = {
    	# 将Fiddler右上方的内容填在headers中
        "Accept-Charset": "UTF-8",
        "Accept-Encoding": "gzip,deflate",
        "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.0; HUAWEI CAZ-TL10 Build/HUAWEICAZ-TL10)",
        "X-Requested-With": "XMLHttpRequest",
        "Content-type": "application/x-www-form-urlencoded",
        "Connection": "Keep-Alive",
        "Host": "gamehelper.gm825.com"
    }
    # 右上方有个get请求,将get后的网址赋给heros_url
    heros_url = "http://gamehelper.gm825.com/wzry/hero/list?channel_id=90001a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.1.0&version_code=13010&cuid=F6DFAFC3BED1C29825EC8D404110F5C5&ovr=7.0&device=HUAWEI_HUAWEI+CAZ-TL10&net_type=1&client_id=&info_ms=&info_ma=hoeVma%2BgYmXjgZG7TVJzaoLyRRILGMIaVltuIflvZFE%3D&mno=0&info_la=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&info_ci=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&mcc=0&clientversion=13.0.1.0&bssid=zRqQJG5mLlFy6mYG4YA%2BE0UcqUCBAXmZcXNHROzwWy8%3D&os_level=24&os_id=c0be30adbd11c768&resolution=1080_1788&dpi=480&client_ip=192.168.2.114&pdunid=WWUDU16A29002522"
    # 英雄的列表显示在json格式下
    res = requests.get(url=heros_url, headers=headers).json()
    # 打印列表
    print(res['list'])
    # 计算有多少个英雄
    print(len(res['list']))

if __name__ == "__main__":
    main()

上述代码可以将英雄爬下来,下面是运行结果 (上面还有好多):

 可以观察到,每个英雄的图片也各自的字典的"cover"下,接下来将图片下载到电脑 :

import requests
import os
from urllib.request import urlretrieve

# 右上方有个get请求,将get后的网址赋给heros_url
heros_url = "http://gamehelper.gm825.com/wzry/hero/list?channel_id=90001a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.1.0&version_code=13010&cuid=F6DFAFC3BED1C29825EC8D404110F5C5&ovr=7.0&device=HUAWEI_HUAWEI+CAZ-TL10&net_type=1&client_id=&info_ms=&info_ma=hoeVma%2BgYmXjgZG7TVJzaoLyRRILGMIaVltuIflvZFE%3D&mno=0&info_la=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&info_ci=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&mcc=0&clientversion=13.0.1.0&bssid=zRqQJG5mLlFy6mYG4YA%2BE0UcqUCBAXmZcXNHROzwWy8%3D&os_level=24&os_id=c0be30adbd11c768&resolution=1080_1788&dpi=480&client_ip=192.168.2.114&pdunid=WWUDU16A29002522"


def imgs_download(heros_url, headers):
    res = requests.get(url=heros_url, headers=headers).json()
    hero_path = "heros_img"
    for hero in res['list']:
        img_url = hero['cover']
        hero_name = hero['name'] + ".png"
        filename = hero_path + "/" + hero_name
        if hero_path not in os.listdir():
            os.makedirs(hero_path)
        urlretrieve(url=img_url, filename=filename)


def main():
    headers = {
        # 将Fiddler右上方的内容填在headers中
        "Accept-Charset": "UTF-8",
        "Accept-Encoding": "gzip,deflate",
        "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.0; HUAWEI CAZ-TL10 Build/HUAWEICAZ-TL10)",
        "X-Requested-With": "XMLHttpRequest",
        "Content-type": "application/x-www-form-urlencoded",
        "Connection": "Keep-Alive",
        "Host": "gamehelper.gm825.com"
    }
    # 英雄的列表显示在json格式下
    # res = requests.get(url=heros_url, headers=headers).json()
    # 打印列表
    # print(res['list'])
    # 计算有多少个英雄
    # print(len(res['list']))
    imgs_download(heros_url, headers)


if __name__ == "__main__":
    main()

上述是下载图片的源码,下载有点慢,部分结果如下图 (是按照拼音首字母排序,本来最新的一个是司马懿的):

 接下来就是打印每个英雄的历史背景与使用技巧,个人觉得英雄出装和铭文这种东西得靠自己摸索(说实话是我懒得我爬他的铭文和推荐出装了)

import requests
# import os
# from urllib.request import urlretrieve

# 右上方有个get请求,将get后的网址赋给heros_url
heros_url = "http://gamehelper.gm825.com/wzry/hero/list?channel_id=90001a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.1.0&version_code=13010&cuid=F6DFAFC3BED1C29825EC8D404110F5C5&ovr=7.0&device=HUAWEI_HUAWEI+CAZ-TL10&net_type=1&client_id=&info_ms=&info_ma=hoeVma%2BgYmXjgZG7TVJzaoLyRRILGMIaVltuIflvZFE%3D&mno=0&info_la=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&info_ci=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&mcc=0&clientversion=13.0.1.0&bssid=zRqQJG5mLlFy6mYG4YA%2BE0UcqUCBAXmZcXNHROzwWy8%3D&os_level=24&os_id=c0be30adbd11c768&resolution=1080_1788&dpi=480&client_ip=192.168.2.114&pdunid=WWUDU16A29002522"

def hero_info(heros_url, headers):
    res = requests.get(url=heros_url, headers=headers).json()
    for hero in res['list']:
        id = hero['hero_id']
        info_url = "http://gamehelper.gm825.com/wzry/hero/detail?hero_id=" + id + "&channel_id=90001a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13.0.1.0&version_code=13010&cuid=F6DFAFC3BED1C29825EC8D404110F5C5&ovr=7.0&device=HUAWEI_HUAWEI+CAZ-TL10&net_type=1&client_id=UTAH2jTRdl%2FfxnOjEiOS4A%3D%3D&info_ms=%2BpdbZccbIPeH%2BTpoBwY0gw%3D%3D&info_ma=hoeVma%2BgYmXjgZG7TVJzaoLyRRILGMIaVltuIflvZFE%3D&mno=0&info_la=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&info_ci=mh%2FAbS1DsM0kM7IDlFIbYQ%3D%3D&mcc=0&clientversion=13.0.1.0&bssid=zRqQJG5mLlFy6mYG4YA%2BE0UcqUCBAXmZcXNHROzwWy8%3D&os_level=24&os_id=c0be30adbd11c768&resolution=1080_1788&dpi=480&client_ip=192.168.2.114&pdunid=WWUDU16A29002522"
        res = requests.get(url=info_url, headers=headers).json()
        print(hero['name'] + " : ")
        print("历史上的他/她 : " + res['info']['history_intro'])
        print("背景故事 : " + res['info']['background_story'])
        print("对抗技巧 : " + res['info']['hero_tips'])
        print("团战思想 : " + res['info']['melee_tips'] + "\n")


def main():
    headers = {
        # 将Fiddler右上方的内容填在headers中
        "Accept-Charset": "UTF-8",
        "Accept-Encoding": "gzip,deflate",
        "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.0; HUAWEI CAZ-TL10 Build/HUAWEICAZ-TL10)",
        "X-Requested-With": "XMLHttpRequest",
        "Content-type": "application/x-www-form-urlencoded",
        "Connection": "Keep-Alive",
        "Host": "gamehelper.gm825.com"
    }
    hero_info(heros_url, headers)


if __name__ == "__main__":
    main()

上述代码将app中描述英雄的背景与实战技巧打印出来,具体结果实例如下 :

以上就是爬取手机app信息的内容,自己也还是处于入门阶段,所以只有先试水一下这种简单一点。 

  • 19
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值