做app爬虫首先需要把抓包工具配置好如:Charles、fiddler等,具体如何操作本文不做过多介绍。这篇将以某应用商店作为案例进行讲解。


难度:入门级


目标:

获取目标应用的新游戏预约数据


环境:

Python3.7.3、requests、mumu模拟器


目录:

1、分析请求

2、代码实现

3、总结


1、分析请求

配置完抓包软件的代理后,打开抓包软件(这里使用的是Charles),然后点开目标应用,可以看到抓包软件截获了很多请求。




iOS10爬虫 appstore爬虫 app爬虫教程_android


iOS10爬虫 appstore爬虫 app爬虫教程_iOS10爬虫 appstore爬虫_02


iOS10爬虫 appstore爬虫 app爬虫教程_数据_03


我们需要的数据有游戏名和游戏预约人数,预约人数多的游戏可能比较好玩。我们搜一下英雄联盟的预约人数930.3万,对于这种930.3万数据,后台返回的一般都是一个具体的数字,而不会是930.3,搜的时候可以先试试“9303”就可以看到有一个结果,双击进入请求查看数据。


iOS10爬虫 appstore爬虫 app爬虫教程_数据_04


很容易就可以知道这就是数据请求,右键请求获取curl


iOS10爬虫 appstore爬虫 app爬虫教程_抓包_05


将结果放进postman中拿到一个基本的请求代码。不了解postman的可以看三秒完成一个爬虫。


iOS10爬虫 appstore爬虫 app爬虫教程_爬虫_06


拿到代码先把header的cookie注释掉。


import requests

url = "https://yybgame.qq.com/cgi-bin/appstage/newgame_booking_list?pageSize=20&index=0&imei=500000000243233&imsi=&qua=TMAF_773_F_5492%2F075492%26NA%2F075492%2F7732130_5492%266.0.1_23_2_2_0_2%260_0_14%26Android_MuMu_Netease_cancrox64%26998856%265492%26V3&guid=1224551142044393472&androidId=9c1d02c4c77c0b98&mac=08-00-27-71-60-09&_r=1623913628570"

payload={}
headers = {
  'Host': 'yybgame.qq.com',
  'Origin': 'https://qzs.qq.com',
  'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Mobile Safari/537.36/apiLevel/23/qqdownloader/9/ft_apiLevel/1_0_0_0/yyb_version/7732130/yyb_build/5492',
  'Accept': '*/*',
  'Referer': 'https://qzs.qq.com/open/mobile/yyb_new_game/v2/booking.html?hide=1&title=%E6%96%B0%E6%B8%B8%E9%A2%84%E7%BA%A6&selflink=1',
  'Accept-Language': 'zh-CN,en-US;q=0.8',
  'X-Requested-With': 'com.tencent.android.qqdownloader'
}

response = requests.request("GET", url, headers=headers)

print(response.json())


可以正常拿到数据。

现在需要分析一下url的变化,往下翻页拿到第二页的url,很容易就可以比对出变换的参数是index,且间隔为20。


2、代码实现

这里只获取了几页数据,当然你也可以全部获取完,自己修改一下代码就好咯。

将初步拿到的数据格式化,找到目标数据所在的位置。


iOS10爬虫 appstore爬虫 app爬虫教程_iOS10爬虫 appstore爬虫_07


通过对比很快就可以找到数据。

代码实现:


import requests

headers = {
    'Host': 'yybgame.qq.com',
    'Origin': 'https://qzs.qq.com',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; MuMu Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Mobile Safari/537.36/apiLevel/23/qqdownloader/9/ft_apiLevel/1_0_0_0/yyb_version/7732130/yyb_build/5492',
    'Accept': '*/*',
    'Referer': 'https://qzs.qq.com/open/mobile/yyb_new_game/v2/booking.html?hide=1&title=%E6%96%B0%E6%B8%B8%E9%A2%84%E7%BA%A6&selflink=1',
    'Accept-Language': 'zh-CN,en-US;q=0.8',
    'X-Requested-With': 'com.tencent.android.qqdownloader'
}

for page in range(5):
    url = f"https://yybgame.qq.com/cgi-bin/appstage/newgame_booking_list?pageSize=20&index={page * 20}&" \
          f"imei=500000000243233&imsi=&qua=TMAF_773_F_5492%2F075492%26NA%2F075492%2F7732130_5492%266.0.1_23_2_2_0_2%260_0_14%26" \
          f"Android_MuMu_Netease_cancrox64%26998856%265492%26V3&guid=1224551142044393472&androidId=9c1d02c4c77c0b98&mac=08-00-27-71-60-09&_r=1623913628570"
    res = requests.get(url, headers=headers).json()

    for i in res['bookingGames']['list']:
    	print(f"名称:{i['name']}")
    	print(f"预约人数:{i['bookingCount']}")



3、总结

可以发现做app爬虫好像和网页爬虫没什么区别,只是获取请求的工具尤开发者工具换成了抓包工具。确实在做入门级难度的爬虫时很像,主要的区别是在做逆向破解参数的时候,这里就不过多赘述了,之后会讲到。