参考内容:Python3 网络爬虫开发实战-崔庆才
除了 Web 网页,爬虫也可以抓取 App 的数据。App 中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于 App 没有浏览器这种可以比较直观的看到后台请求的工具,所以主要用一些抓包技术来抓取数据。
这里介绍的抓包工具有 Charles,mitmproxy 和 mitmdump。一些简单的接口可以通过 Charles 或 mitmproxy 分析,找出规律,然后直接用程序模拟来抓取。但是如果遇到更复杂的接口,就需要利用 mitmdump 对接 Python 来对抓取到的请求和响应进行实时处理和保存。另外,既然要做规模采集,就需要自动化 App 的操作而不是人工去采集,所以这里还需要一个工具叫做 Appium,他可以像 Selenium 一样对 App 进行自动化控制,如自动化模拟 App 的点击,下拉等操作。
Charles 的安装
Charles 是一个网络抓包工具,相比 Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选它来作为主要的移动端抓包工具。
相关链接
安装方式
我们可以在官网下载最新的稳定版本,如下图所示,我们可以发现,它支持 Windows,Linux 和 Mac 三大平台。直接点击对应的安装包下载即可。安装过程这里不再赘述。
Charles 是收费软件,不过可以免费试用 30 天。如果试用期过了,其实还可以试用,不过每次试用不能超过 30 分钟,启动有 10 秒的延时,但是完整的软件功能还是可以使用的,所以还算比较友好。
证书配置
现在很多页面都在向 HTTPS 方向发展,HTTPS 通信协议应用越来越广泛。如果一个 APP 通信应用了 HTTP协议,那么它通信的数据都会是被加密的,常规的截包方法是无法识别请求内部的数据的。
安装完成后,如果我们想要做 HTTPS 抓包的话,那么还需要配置一下相关 SSL 证书。接下来我们看看各个平台下的证书配置过程。
Charles 是运行在 PC 端的,我们要抓取的是 APP 端的数据,所以要在 PC 和手机端都安装证书。
Windows
如果你的 PC 是 Windows 系统,可以按照下面的操作进行证书配置。
首先,打开 Charles,点击 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”,即可进入证书的安装页面。
接下来会弹出一个安装证书的页面,点击 “安装证书” 按钮,就会打开证书导入向导。
直接点击 “下一步” 按钮,此时需要选择证书的存储区域,点击第二个选项 “将所有的证书放入下列存储”,然后点击 “浏览” 按钮,从中选择证书存储的位置为: “受信任的根证书颁发机构”,再点击 “确定” 按钮,然后一直点击 “下一步” 按钮,直到完成导入。
Mac
如果你的 PC 是 Mac 系统,可以按照下面的操作进行证书配置。
同样是点击 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate”,即可进入证书的安装页面。
接下来,找到 Charles 的证书并双击,将 “信任” 设置为 “始终信任” 即可,如下图所示:
这样就成功安装了证书。
Android
如果你的手机是 Android 系统,可以按照下面的操作进行证书配置。
首先,查看电脑的 Charles 代理是否开启,具体操作是点击 “Proxy” –> “Proxy Settings”,打开代理设置页面,确保当前的 HTTP 代理是开启的,如下图所示。这里的代理端口为 8888, 也可以自行修改。
接下来,将手机和电脑连在同一个局域网下。例如当前电脑的 IP 为 “192.168.199.2”,那么首先设置手机的代理为 “192.168.199.2:8888”。
设置完毕后,电脑上会出现一个提示窗口,询问是否信任此设备,如下图所示:
此时点击 Allow 按钮即可。这样手机就和 PC 连在同一个局域网内了,而且设置了 Charles 的代理,即 Charles 可以抓取到流经 App 的数据包了。
接下来,再安装 Charles 的 HTTPS 证书。
在电脑上打开 “Help” –> “SSL Proxying” –> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,如下图所示:
此时会看到如下图所示的提示,它提示我们在手机上设置好 Charles 的代理(刚才已经设置好了),然后再手机浏览器中打开 chls.pro/ssl 下载证书。
在手机上打开 chls.pro/ssl 后,变回弹出证书的安装页面。点击 “安装” 按钮,然后输入密码,为证书添加一个名称即可完成证书的安装。
mitmproxy 的安装
mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler,Charles 的功能,只不过它通过控制台的形式操作。
此外,mitmproxy 还有两个关联组件,一个是 mitmdump,它是 mitmproxy 的命令行接口,利用它可以对接 Python 脚本,实现监听后的处理;另一个是 mitmweb,它是一个 web 程序,通过它可以清除的观察到 mitmproxy 捕获的请求。
相关链接
- GitHub: https://github.com/mitmproxy/mitmproxy/
- 官方网站: https://www.mitmproxy.org
- PyPI: https://pypi.org/project/mitmproxy/
- 官方文档: https://docs.mitmproxy.org/stable/
- mitmdump 脚本: https://docs.mitmproxy.org/stable/addons-scripting/
- 下载地址: https://github.com/mitmproxy/mitmproxy/releases
- DockerHub: https://hub.docker.com/r/mitmproxy/mitmproxy/
安装方式
最简单的安装方式还是使用 pip,直接执行如下命令即可完成安装:
1 | pip install mitmproxy |
这是最简单和通用的安装方式,执行完毕之后即可完成 mitmproxy 的安装,另外还附带安装了 mitmdump 和 mitmweb 这两个组件。
证书配置
对于 mitmproxy 来说,如果想要截获 HTTPS 请求,就需要设置证书。mitmproxy 在安装后会提供一套 CA 证书,只要客户端信任了 mitmproxy 提供的证书,就可以通过 mitmproxy 获取 HTTPS 请求的具体内容,否则 mitmproxy 是无法解析 HTTPS 请求的。
首先运行以下命令产生 CA 证书,并启动 mitmdump:
1 | mitdump |
接下来,我们就可以在用户家目录下的 .mitmproxy 目录里面找到 CA 证书,如下图所示:
证书一共有 5 个,下表简要说明了这5个证书
名称 | 描述 |
---|---|
mitmproxy-ca.pem | PEM 格式的证书私钥 |
mitmproxy-ca-cert.pem | PEM 格式证书,适用于大多数非 Windows 平台 |
mitmproxy-ca-cert.p12 | PKCS12格式的证书,适用于 Windows 平台 |
mitmproxy-ca-cert.cer | 与 mitmproxy-ca-cert.pem 相同,只是改变了后缀,适用于部分 Android 平台 |
mitmproxy-dbparam.pem | PEM 格式的秘钥文件,用于增强 SSL 安全性 |
下面我们介绍一下 Windows,Mac,iOS 和 Android 平台下的证书配置过程。
Windows
双击 mitmproxy-ca-cert.p12,就会出现导入证书的引导页,直接点击 “下一步” 按钮即可,会出现密码提示,这里不需要设置密码,直接点击 “下一步” 按钮即可。
接下来需要选择证书的存储区域,这里选择第二个选项 “将所有的证书都放入下列存储”, 然后点击 “浏览” 按钮,选择证书的存储位置为 “受信任的根证书颁发机构”,接着点击 “确定” 按钮,然后点击 “下一步” 按钮。
最后,如果有安全警告弹出,直接点击 “是” 按钮即可。这样就在 Windows 下配置完 CA 证书了。
Mac
Mac 下双击 mitmproxy-ca-cert.pem 即可弹出钥匙串管理页面,然后找到 mitmproxy 证书,打开其设置选项,选择 “始终信任” 即可。如下图所示:
iOS
将 mitmproxy-ca-cert.pem 文件发送到 iPhone 上,推荐使用邮件的方式发送,然后再 iPhone 上可以直接点击附件并识别安装。
点击 “安装” 按钮后,会跳转到安装描述文件的页面,点击 “安装” 按钮,此时会有警告提示,继续点击右上角的 “安装” 按钮,安装成功之后会有已安装的提示。
Android
在 Android 手机上,同样需要将证书 mitmproxy-ca-cert.cer 文件发送到手机上,例如直接复制文件。
接下来点击证书,输入手机密码,便会出现一个提示窗口,这时输入一个证书的名称,然后点击 “确定” 按钮即可完成安装。
Appium 的安装
Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它可以驱动 Android,iOS 等设备完成自动化测试,比如模拟点击,滑动,输入等操作。
相关链接
- GitHub: https://github.com/appium/appium
- 官方网站: http://appium.io
- 官方文档: http://appium.io/docs/en/about-appium/intro/
- 下载链接: https://github.com/appium/appium-desktop/releases
- Python Client: https://github.com/appium/python-client
安装方式
首先,需要安装 Appium。Appium 负责驱动移动端来完成一系列操作,对于 iOS 设备来说,它使用苹果的 UIAutomation 来实现驱动;对于 Android 来说,他使用 UIAutomator 和 Selendroid 来实现驱动。
同时 Appium 也相当于一个服务器,我们可以向它发送一些操作指令,它会根据不同的指令对移动设备进行驱动,以完成不同的动作。
安装 Appium 有两种方式,一种是直接下载安装包 Appium Desktop 来安装,另一种是通过 Node.js 来安装。
Appium Desktop
Appium Desktop 支持全平台的安装,我们直接从 GitHub 的 Release 里面下载即可。链接地址为 “https://github.com/appium/appium-desktop/releases",如下图,目前最新的版本为 1.15 :
Windows 平台可以下载 exe 安装包,Mac 平台可以下载 dmg 安装包,Linux 平台可以选择下载源码,但是更推荐使用 Node.js 安装方式。
安装完成后运行,看到如下所示页面,则证明安装成功。
Node.js
首先需要先安装 Node.js,具体的安装方式可以参见 菜鸟教程,安装完成之后就可以使用 npm 命令了。
接下来使用 npm 命令全局安装 Appium 即可:
1 | npm install -g appium |
此时等待命令执行完成即可。
Android 开发环境配置
如果我们要使用 Android 设备做 App 抓取的话,还需要下载和配置 Android SDK,这里推荐直接安装 Android Studio,其下载地址为: https://developer.android.google.cn/studio/。下载完成之后直接安装即可。
然后,我们还需要下载 Android SDK。直接打开首选项里面的 Android SDK 设置页面,勾选需要安装的 SDK 版本,点击 “OK” 按钮即可下载和安装勾选的 SDK 版本。如下图所示:
另外,还需要配置一下环境变量,添加 ANDROID_HOME 为 Android SDK 所在的路径,然后再添加 SDK 文件夹下的 tools 和 platform-tools 文件夹到 PATH 中。
更详细的配置可以参考 Android Studio 的官方文档: https://developer.android.google.cn/studio/intro