是《如何批量抓取网页上的数据?》的姐妹篇。
上次的办法,是在表现层把内容抓取下来,主要适用于网页。但现在毕竟是移动互联网时代,很多产品只有 app 或者小程序,怎么办?
我们知道,数据一般是通过服务端接口获取的,不管网页还是 app,不管 UI 长什么样,只要知道接口内容,自然也就可以得到我们想要的数据。这个操作一般被称为“抓包”。
准备工作
1. 电脑需要安装客户端,推荐的是 Charles,一个花瓶的图标,Win/Mac 均可。
2. 查看你电脑的 IP 地址。
?Windows
?macOS
3. 打开手机,保证跟电脑处于同一个 Wi-Fi 网络,然后把代理设置为手动,服务器填电脑的 IP 地址,端口在 Charles 可以设置,默认是 8888。
4. 连上后,电脑客户端一般会有授权弹出,而手机网络也可以正常访问各个 app。
抓包原理是,让你手机在访问数据的时候,都先经过电脑,那么我们就可以方便地获取这些数据。在你浏览、加载数据的过程中,Charles 会不断有新请求出现,那就证明成功了。
解决 HTTPS 证书问题
虽然能看到接口请求,但打开的数据却是乱码。这是因为往往很多产品都使用了 HTTPS 加密协议。
在手机/电脑浏览器访问下面网址,按指示安装描述文件即可。
charlesproxy.com/getssl
这时就可以看到,数据内容都被正确显示出来!
清洗数据
剩下就是读懂数据和保存数据的工作了。
点?“垃圾桶”图标,可以清除记录;点⏺“录制”图标,可以暂停/恢复抓取;右键 save response,就可以批量把请求结果以json 格式下载下来。
通过每次操作所对应的请求,能看到出界面上的数据怎么被展示,以及可能还有不少没在页面展示、但接口也返回了的冗余数据。
很多在线的 json 转 csv 工具,可以轻松把内容保存为行、列的 csv 格式。还有合并 json 文件、提取指定字段的需求?善用搜索引擎,世界上一定还有其他人跟你遇到同样的问题。
?Windows