APP数据采集怎么实现的?(附带大仙分享爬坑技巧)
最近半年,我们八爪鱼陆续接到好几个APP数据采集的项目需求,我在群里面,偶尔也看到有些用户在问,有没有APP数据采集的工具。鉴于我们做过的几个APP数据采集项目的经验,我可以告诉大家,现在APP数据采集,市面上还没有通用的工具。我们八爪鱼内部是有一套工具,但由于使用的难度较高,需要编写脚本,所以不对普通用户公开,我们仅接受项目定制。
虽然不对外公开,但并不妨碍我们将技术分享出来,APP数据采集,一般走以下两种方式:
1.两种思路
1. 抓包
2. HOOK
2.抓包
有代码经验或APP开发的同学都很容易理解,其实很多APP,走的都是webservice通讯协议的方式,并且由于是公开数据,而且大部分是无加密的。所以只要对网络端口进行监测,对APP进行模拟操作,即可知道APP里面的数据是如何获取的。
我们只需要写代码模拟其请求,无论POST还是GET,即可得到该请求所返回的信息。再通过对返回的信息结构化解析,即可得到我们想要的数据。
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor())
//从https://github.com/****开始抓
.addUrl("https://github.com/****")
//设置Scheduler,使用Redis来管理URL队列
.setScheduler(new RedisScheduler("localhost"))
//设置Pipeline,将结果以json方式保存到文件
.addPipeline(new JsonFilePipeline("D:\\data\\webmagic"))
//开启5个线程同时执行
.thread(5)
//启动爬虫
.run();
}
以模拟采集“meizu”应用市场为例
应用市场产品
抓包返回参数
整个抓包过程
3.HOOK技术
HOOK技术是一种走操作系统内核的技术,由于安卓系统是开源的,所以可以借助一些框架修改内核,从而实现你要的功能。HOOK的形式,我们走的是Xposed框架。Xposed是一款可以在不修改任何其他开发者开发的应用(包括系统服务)的情况下,改变程序运行的一个开源框架服务。基于它可以制作出许多功能强大的模块,以此来达到应用程序按照你的意愿运行的目的。
如果把安卓手机看做一座城堡,那Xposed可以让你拥有一个上帝视角,城里的运作细节尽收你眼底,还能让你插一手改变城堡的运作规律。
什么意思呢?简单的说就是你可以通过他,自动化的控制你的APP。如果将我们的APP开在模拟器上,我们可以通过编码,通过他告诉APP这一步干什么,下一步干什么。你把它理解成类似按健精灵或游戏打怪外挂就可以了。
而他每走一步,APP与服务端交互的数据,均可获取下来。这种方式广泛用于一些成熟的APP。比如某信采集。
public class HookActivity implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
final String packageName = lpparam.packageName;
XposedBridge.log("--------------------: " + packageName);
try {
XposedBridge.hookAllMethods
(Activity.class, "onCreate", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
XposedBridge.log("=== Activity onCreate: " + param.thisObject);
}
});
} catch (Throwable error) {
XposedBridge.log("xxxxxxxxxxxx: " + error);
}
}
}
其实我们八爪鱼曾经也想开发一款通用的APP数据采集工具,并且两年前在这块投入研究了小半年,我们做出了一款APP采集脚本编辑工具,可以让一款APP的数据采集项目缩减到3-5天即可开发完成。但我们认为,这个工具需要编写脚本一般用户是比较难上手的,所以仅作为内部项目使用。
以HOOK某APP为例
HOOK指令打开某APP
HOOK指令获取数据
4.这些年走过的坑
聊完APP采集的思路,我们跟大家分享一些遇过的坑吧,让大家乐一乐
坑一:签名算法
以某信的文章列表页及某信息页为例,对其http访问进行抓包,会发现其url的一个核心参数是我们无法知道如何生成的,这就导致,我们不可能直接用该url进行信息爬取;签名算法如果无法破解,HTTP这条路就是死路了。
坑二:http爬取回来的信息和页面显示不一致
以某信的某信息页为例,对比直接访问某信页面及http爬取的信息,可明显发现http爬取到的信息较少。造成得两种方式都用,才能既照顾速度又照顾完整性。
坑三:模拟器中的坑
APP自动识别你的运行环境进行屏蔽,最厉害的还是某信,连你是用模拟器打开还是真机打开,是什么内核的,全部进行限制。曾经见过牛人,找某手机厂商专门定做真机来配合。
坑四:帐号的坑
这个坑就有点大了,要找号、养号,都不是件容易的事情,更惨的是封号,真真让你一夜回到解放前。
最后,2018新年已开始工作,全年无休,欢迎随时找我聊工作。
服务提示