每天早上七点三十,准时推送干货
Hello,大家好,五一小长假结束,今天开始上班!不过想想,再过三天就又周末,想想还是有点小激动,嘿嘿!

前几天的文章,阿粉教了大家如何爬取豆瓣短评数据。爬取网页的数据,只要我们熟悉 Xpath,还是不难的。
不过现在移动时代,很多应用可能只有客户端软件,只能在手机上使用,并没有相应的网页。
另外还有一些网页并非是静态网页,页面内容将会采用 JS 处理数据后生成,可以发生变化。这种动态网页我们如果直接使用 HttpClient 访问网页,解析该网页结构,是无法获取到所需的数据。
针对以上两种情况,使用 xpath 解析网页,已经没啥作用。这里阿粉教大家其他技巧获取这些数据:
使用抓包工具获取应用访问请求
模拟浏览器访问动态网页
这篇文章我们主要讲下如何通过抓包工具获取应用访问请求,下篇我们再聊下如何通过模拟浏览器访问动态网页。
抓包底层原理
不管是小程序,还是 APP,产品页面显示的数据都是通过访问后台请求获取。现在互联网一般使用 Http/Https 协议进行传输,数据格式通常采用 json 格式。
知道这层逻辑之后,只要我们能获取这个请求链接,那我们其实就可以直接访问该请求链接,得到返回 json 数据,然后解析获取相应的数据。
这个过程最主要就是如何获取手机应用的访问请求?这里我们就需要通过借助抓包工具获取。
抓包工具原理其实也不难,简单来说,抓包工具就是一个代理软件,代理相当于一个中间人。
客户端首先将所有请求发送给代理,然后再由代理发送给服务器。服务器对请求的返回的响应先由代理拦截,再由代理返给客户端。
ps:这不就是我们常用 AOP 模式吗~
果然技术原理都是相通的。

市面上抓包工具还是比较多,常用有:
Windows 平台:Fildder
Mac 平台:Charles
iOS 系统:Thor
Android 系统:HttpCanary
以上四个抓包工具,基本上覆盖上所有主要平台。下面阿粉将会着重介绍 Charles,其他平台的工具感兴趣的小伙伴可以自行研究一下。
Charles 抓包实践
Charles 是一款基于 Java 开发的抓包工具,所以可以在多个平台(Windows/Macos/Linux)安装使用,不过阿粉还是觉得在 Mac 使用体验比较好。
Charles 除了上面提到的抓包功能之外,还可以用来拦截网络请求,方便做一些弱网测试等等,功能非常强大。
另外说下,Charles 是一款收费软件,不过可以免费试用 30 天。
下载地址:https://www.charlesproxy.com/download/
安装完成之后,打开 Charles,工具栏介绍如下:

简单使用
Charles 基本使用非常简单,只要打开,Charles 就会开始工作。
举个例子,访问了一下 baidu,我们可以左侧观察到这次请求,触发的所有链接。具体点击某个请求,我们可以观察到所有具体请求信息。

如果此时打开 Charles 并未生效,可以查看一下是否设置通过 Charles 代理选项。

抓包手机请求
上面的示例,我们只是拦截本地 Mac 的请求,接下来我们来看下如何拦截手机应用的请求。
首先我们需要设置手机无线网络连接,以苹果手机为例:
首先进入网络设置的,配置 HTTP 代理。

其次设置服务器 IP,即 Charles 主机 IP,端口默认为 8888。

当然我们可以修改默认端口,打开 Proxy/ProxySettings,设置端口。

设置代理之后,你可能会发现你的手机应用无法上网了,并且 Charles 抓包显示如下 :

不用急,这个问题是是因为我们访问的 HTTPS 请求连接。对于这些请求,我们还需要在手机端安装 Charles 的证书才可以。
我们需要手机 Safari 浏览器输入地址 chls.pro/ssl,出现证书安装页面,点击安装。

然后进入设置/通用/描述文件与设备管理,找到 Charles 的证书,输入本机密码,进行安装。

最后还有一步,iOS 10.3 系统,还需要在设置/通用/关于本机/证书信任设置里面启用完全信任 Charles 证书。

上述设置完成之后,我们再次访问请求,就可以看到 Charles 拦截手机端发出去的请求。

过滤请求
Charles 默认将会拦截所有请求连接,这个情况有时会对我们产生干扰。我们可以在 Charles 进行设置规则,Charles 只会拦截符合规则的请求:

增加规则,比如我只想拦截 m.baidu.com 的请求信息:

此时 Charles 只会拦截我们规定的请求信息,非常清爽。

抓包实战,获取微信文章的阅读,点赞数
手机代理设置完成之后,在微信中任意打开一篇公众号文章,可以在 Charles 中看到多个请求,其中 https://mp.weixin.qq.com/mp/getappmsgext,该请求返回信息中包含文章阅读数,点赞数,评论数量。

这里阿粉安利一款 IDEA 插件 gsonformat,可以将 json 信息快速转成 POJO 类字段信息。这对于我们后期解析 json 数据,作用非常大。

总结
本篇文章阿粉主要跟大家聊了下 Charles 基本抓包技巧,掌握 Charles 抓包技巧之后,爬取手机端 APP 应用请求可以分为以下几步:
通过抓包工具获取访问请求
研究请求之间的关系
解析返回信息
编写爬虫程序,数据存库
好了,今天文章就讲到这,下一篇文章,阿粉再来介绍下,如何获取动态网页的数据,敬请期待!

帮助文档
https://www.cnblogs.com/meitian/p/7327088.html
https://juejin.im/post/5b8350b96fb9a019d9246c4c
https://www.jianshu.com/p/bb8231f48a07
< END >
如果大家喜欢我们的文章,欢迎大家转发,点击在看让更多的人看到。也欢迎大家热爱技术和学习的朋友加入的我们的知识星球当中,我们共同成长,进步。
往期精彩回顾