乐趣区

关于大数据:抖音爬虫教程APP数据采集常见思路

其实所谓抓取 APP 数据和抓取网页数据是存在肯定的不同,抓取网页数据能够采纳模仿拜访网站而后抓取网页接管内容的模式进行数据抓取。而 APP 则更偏向于通过截获数据传输包的模式进行(Wireshark 和 Fiddler+Python)。
一般来说,咱们用 WireShark+Fiddler 来获取大部分数据是没有多大问题的。但这里有个问题是,如果你碰到的是用 SSL/TLS 等加密伎俩加密过的网络数据的时候,往往咱们只能大刀阔斧。在过来的话,如果咱们领有的该传输会话的私钥的话咱们还是能够将它提供给 WireShark 来让其对这些加密数据包进行解密的,但这曾经是想当年还用 RSA 进行网络数据加密的年代的事件了。当今大家都曾经逐步拥抱前向加密技术 PFS 的时代了,所以该办法就不再实用了。因为前向加密技术的目标就是让每个数据交互都应用的是不同的私钥,所以你像以前 RSA 时代一样想只用一个私钥就能把整个 session 会话的网络数据包都破解进去的话是不可能的了(其实能够也通过相似浏览器的 Session Key 性能解决)。

1.App 数据抓取剖析

但凡能够看到的 APP 数据都能够抓取。
剖析钻研过不下 300 个 APP 抓包。
50% 的 app,通过抓包软件就能够剖析出抓取参数并抓取到信息。
30% 的 app,可能须要适当的反编译,剖析出加密算法并抓取到信息。
10% 的 app,可能加固,须要脱壳,而后反编译,剖析出加密算法并抓取到信息。
10% 的 app,通过各式各样的签名,证书,设施绑定等办法,暗藏加密算法。
总的来说,没有不能抓取的 app,只是工夫老本的问题。

2. 爬取思路

1. 抓包
2. HOOK

2.1. 抓包

有代码教训或 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();}

 

2.2.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);
 
       }
 
   }
 
}

3. 须要爬的坑

坑一:签名算法

以某信的文章列表页及某信息页为例,对其 http 拜访进行抓包,会发现其 url 的一个外围参数是咱们无奈晓得如何生成的,这就导致,咱们不可能间接用该 url 进行信息爬取;签名算法如果无奈破解,HTTP 这条路就是绝路了。

坑二:http 爬取回来的信息和页面显示不统一

以某信的某信息页为例,比照间接拜访某信页面及 http 爬取的信息,可显著发现 http 爬取到的信息较少。造成得两种形式都用,能力既关照速度又关照完整性。

坑三:模拟器中的坑

APP 自动识别你的运行环境进行屏蔽,最厉害的还是某信,连你是用模拟器关上还是真机关上,是什么内核的,全副进行限度。已经见过牛人,找某手机厂商专门定做真机来配合。

坑四:帐号的坑

这个坑就有点大了,要找号、养号,都不是件容易的事件,更惨的是封号,真真让你一夜回到解放前。

4. 难度评估

1. 一星

此类 app 没有进行非凡的防护,能够间接在网页拜访 app 中申请的 url
艰难点:无

2. 二星

此类 app 应用的 cookie 和 session 等技术,对数据的申请须要 cookie 等信息
艰难点:
1、申请头须要附带 cookie 值

3. 三星

此类 app 在发动申请时,在 headers 中增加 md5 验证字段,该字段对申请的 url 的参数进行非凡的解决而后进行 hash;如果想爬这类 app,须要对 app 进行反向编译,通过大量的代码浏览,剖析该 app 的 hash 算法和参数拼接;
艰难点:
1、反编译
2、Android 代码的浏览能力
3、破费大量工夫和精力也不肯定能找到,这是最蛋疼的。。。。

4. 四星

此类 app 对申请发动 url 申请,后盾收到申请后在返回的数据中,针对无效数据进行加密,所以在用抓包工具进行剖析时,无奈看到具体的数据;如果想爬取这类 app,只能先去反编译,而后剖析出如何对申请数据加密的算法,只有实现了算法的破解能力进行数据的剖析。
艰难点:
1、无奈通过抓包工具对所需数据进行剖析
2、反编译
3、Android 代码的浏览能力,寻找加密数据的算法
3、破费大量工夫和精力也不肯定能找到,这是最蛋疼的。。。。

5. 工具

1. 抓包工具

                   mac 零碎 Wireshark
                   Mac 零碎 charles
                   windows Fiddler

2. 反编译

Apktool,dex2jar,jd-gui-windows
Jadx-gui
能间接反编译 dex 文件,不便好用
JD-GUI
须要将 dex 文件转到 jar 文件,能够跳转函数
JEB
用的较少
3.hook 工具
Xposed
Frida

TiToData:业余的短视频、直播数据接口服务平台,网址:TiToData

笼罩支流平台:抖音,快手,小红书,TikTok,YouTube

退出移动版