做app爬虫首先需要把抓包工具配置好如:Charles、fiddler等,具体如何操作本文不做过多介绍。这篇将以某应用商店作为案例进行讲解。
难度:入门级
目标:
获取目标应用的新游戏预约数据
环境:
Python3.7.3、requests、mumu模拟器
目录:
1、分析请求
2、代码实现
3、总结
1、分析请求
配置完抓包软件的代理后,打开抓包软件(这里使用的是Charles),然后点开目标应用,可以看到抓包软件截获了很多请求。
我们需要的数据有游戏名和游戏预约人数,预约人数多的游戏可能比较好玩。我们搜一下英雄联盟的预约人数930.3万,对于这种930.3万数据,后台返回的一般都是一个具体的数字,而不会是930.3,搜的时候可以先试试“9303”就可以看到有一个结果,双击进入请求查看数据。
很容易就可以知道这就是数据请求,右键请求获取curl
将结果放进postman中拿到一个基本的请求代码。不了解postman的可以看三秒完成一个爬虫。
拿到代码先把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、代码实现
这里只获取了几页数据,当然你也可以全部获取完,自己修改一下代码就好咯。
将初步拿到的数据格式化,找到目标数据所在的位置。
通过对比很快就可以找到数据。
代码实现:
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爬虫好像和网页爬虫没什么区别,只是获取请求的工具尤开发者工具换成了抓包工具。确实在做入门级难度的爬虫时很像,主要的区别是在做逆向破解参数的时候,这里就不过多赘述了,之后会讲到。