最近沉迷于用 Charles 做代理抓手机的数据。
关于如何使用 Charles 来做为手机的代理进行抓 HTTP/HTTPS 请求,这里有一篇非常详细的图文教程:
http://www.jianshu.com/p/5539599c7a25
另外对于 iOS 11 及以上的手机,还需要按照下面这篇文章来进行设置,否则无法正常抓到 HTTPS 请求 ( 其实还是有某些 APP 的 HTTPS 数据是不能被抓到,或是抓到的是加密的数据 ):
http://www.jianshu.com/p/4005cf4f370d
如果一切正常,我们就可以愉快地玩耍了。
在这篇文章里,我们抓几个微信小程序来玩玩。
公交到站提示
几年前我曾在一个山旮旯工作,公交比较不准时,下去早了等着无聊,下去晚了又怕错过。后来在网上找到一个实时公交的接口,写个脚本判断公交快到了再下楼,愉快地解决了这个问题。
当时的接口现在已经不能用了,不过我们可以用 车来了 这个小程序应用。
把手机连到 Charles proxy,在手机上使用,我们就能在 Charles 上抓到相应的 HTTPS 请求:
从 url 就很容易可以看出这个请求就是获取公交线路到站的详细信息的。
是线路 id,比如 020-04960-1 就是 广州 的 496 路,后面的 1 是表示往某个方向的;
指你在第几个站;
和是 GEO 信息;
其他参数看字面意思就行,这里我马赛克了部分个人信息。
请求的结果:
我们只需要这里的 desc 文本就可以了:
用一条 grep 命令:
即可过滤出来。
整个脚本其实只有两行 curl 命令、一个 grep 以及一个 if 判断。
设好定时任务,就能收到公交到站提示了:
PS:类似这种实时提示,还有 实时空气质量 之类的小程序,都是可以像上面这样去实现,非常简单。
摩拜单车热点图
相信很多同学都使用过共享单车。摩拜单车小程序也是比较好抓,正常使用登录后,可以看到这个请求:
可以看到这个请求返回了附近的摩拜单车的信息,包括单车的 id,位置 ( distX, distY ),单车离你的距离,单车的类型等。
提交的参数:
header 里需要有:
mobileNo 这是你的手机号码
time 测试过没有影响,固定一个即可
accesstoken, userid, wxcode 个人相关的信息
citycode 城市代码
其他的参数可以不变
POST 参数:
longitude, latitude 你当前的 GEO 地址
altitude 海拔,貌似不太重要,可以不变
wxcode 个人信息,跟 header 里的一致
citycode 城市代码,跟 header 里的一致
其他的参数可以不变
然后定义一个扫描函数,给定左上角和右下角两个点,对一个长方形范围进行扫描抓取,步长我设为 0.001 :
抓取完后可用 gmaps 展示出来,谷歌家的地图,不方便访问外国网站的同学也可以用其他地图接口:
最后设个定时任务,6点到22点间,每小时收集一次,以下就是随时间变化的摩拜单车热点图了:
ofo单车
抓完摩拜怎能不抓下 ofo 呢!
ofo 的请求比起 mobike 来说,参数更少一点:
对同一个地区进行扫描抓取,可以得到下面的热点图:
可以看到跟 mobike 的热点图是差不多的,符合现实情况。
Have Fun
本文来自企鹅号 - 脚本有意思媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 脚本有意思媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。