App数据的爬取
在网页中,我们可以借助浏览器开发者工具中的Network面板看到网页中产生的所有网络请求和响应内容,然而App怎么办呢?想拦截App中的网络请求,就得用到抓包工具了,例如Charles、Fiddler、mitmproxy等,我们可以通过这些工具拦截App和API通信的请求内容和响应内容,如果能从中找到一定的规律,就可以用程序直接构造请求来模拟API的请求,从而完成数据爬取。
1. Charles抓包工具的使用
Charles是一个网络抓包工具,可以用它抓起App运行过程中产生的所有请求内容和响应内容,这和在浏览器开发者工具的Network面板中看到网页产生的内容是一样的道理。
Charles、Fiddler等都是非常强大的HTTP抓包软件,功能基本类似,下面以Charles作为移动端抓包工具分析App的数据包。
- 目标
以一个电影示例App为例,利用Charles抓取这个App在运行过程中产生的网络数据包,然后查看具体的请求内容和响应内容。同时使用Python改写抓取到的数据包中的请求,继而爬取App数据。
- 准备工作
Charles运行在一个电脑上,运行的时候会在该电脑的8888端口开启一个代理服务,首先请确保已经正确安装好Charles并开启了代理服务。本人是mac系统下的Charles试用版。然后再准备一部Android手机或模拟器(系统版本最好在7.0以下),并让手机或模拟器的网络和Charles所在电脑的网络处于同一个局域网下(可以让模拟器通过虚拟网络与电脑连接,也可以让手机真机和电脑连接同一个Wi-Fi)。之后设置好Charles代理和Charles CA证书,在Charles中开启SSL监听整个配置过程可以在[小蜜蜂AI网站][https://zglg.work]的GPT问答获取。SSL代理配置一定要开启,而且Location的host和port都设置为*。
- 抓包原理
设置手机代理为Charles的代理服务地址,这样手机访问互联网的数据包就会先流经Charles,再由Charles转发给真正的服务器;同样,服务器返回的数据包也会先到达Charles,再由Charles转发给手机。整个过程中的Charles相当于中间人,可以捕获所有数据包,就是可以捕获所有请求内容和响应内容。而且,Charles还可以对请求的内容和响应的内容做修改。
-
实战抓包
打开Charles,运行界面如下图所示:
Charles会一直监听手机产生的数据包,捕获的数据包将显示在界面左侧,随着时间的推移,会捕获越来越多的数据包,左侧列表里的内容也越来越多。
现在打开手机上下载的app1,(安装包下载地址为https://app1.scrape.center/,访问即可下载)。如下图所示:
会发现Charles已经捕获了对应的数据包,其界面类似下图所示: