抖音爬虫原理大揭秘

·  阅读 8649
抖音爬虫原理大揭秘

声明: 本文只做技术研究,请勿用于任何非法用途。

最近有不少小伙伴投入短视频赛道,也出现不少第三方数据商,为大家提供抖音爬虫数据。

小伙伴们有没有好奇过,这些数据是如何获取的,普通技术小白能否也拥有自己的抖音爬虫呢?

本文会全面解密抖音爬虫的幕后原理,不需要任何编程知识,还请耐心阅读。

1. 什么是 HTTP 请求

在制作爬虫前,首先需要了解,爬虫数据是怎么获得的。

以抖音 APP 为例,我们从抖音上看视频,和我们从浏览器上访问网站原理是一样的。 都是通过标准的 HTTP 请求来交互。

那么什么是 HTTP 请求呢?

HTTP 请求示例

HTTP 请求其实非常简单,可以理解为规定好格式的一组文字消息。请求消息中一般包含三样东西:

  1. 请求网址 (URL),例如抖音 APP 后台网址

  2. 你要做的事情 (请求参数), 例如是浏览,点赞还是上传视频等

  3. 你的身份信息 (Cookie) 和校验信息 (Token),表明你是谁,你请求合法吗

抖音服务器收到 HTTP 请求后,会先验证合法性,然后按照你的要求,配合你的身份和地理位置等,给你回复规定格式的文本消息。

2. 抖音 HTTP 请求流程

我们以安卓 10.6 版首页推荐视频为例,来看一个真实的抖音请求流程:

抖音 HTTP 请求流程

上图是通过抓包软件抓取的首页推荐视频请求数据。可以看出,当你一打开抖音,APP 就会自动向抖音服务器发送一条 HTTP 请求消息。

图中蓝色箭头可以看出,请求是向 aweme-hl.snssdk.com/aweme/v2/fe… 这个网址发送的 (URL)。

黄色箭头标出该 HTTP 请求包含了地理位置信息 (请求参数),以及身份信息 (Cookie)。

抖音服务器收到请求后,就知道你是谁,你在哪里,你要干什么。然后会将红色箭头中的视频推荐数据回复给你。

点开回复数据,可以看到其中包含了视频 ID,标题,描述,点赞量,评论等多种信息。

有的读者可能注意到一串 \350\241\250\346\203\205 这样奇怪的数字,这其实是一种叫 UTF-8 的编码方式。

可以简单理解为每三组 \xxx 组成一个中文字符。比如上面这串数字翻译过来就是 表情 两个字。

抖音 APP 通过读取回复消息,就知道该给我们展示哪些视频了。

但此时并没有结束,APP 还要根据返回的视频 ID,额外做两次 HTTP 请求,以获得需要展示的视频数据和缩略图信息,这样才能真正给我们展示首页推荐视频。

3. HTTP 包到底长什么样?

小伙伴们读到这里,应该明白整个抖音数据的请求流程了。俗话说纸上得来终觉浅,我们就以抖音点赞为例,手把手教大家怎样抓取和查看一个真实的 HTTP 请求包。

1. 下载抓包软件

首先,需要下载 HttpCanary 抓包软件,可以从 Google Play 或者 Apkpure 里下载。安装完成后,重启手机,就可以开始抓包了。

2. 抓取点赞请求包

先打开抖音 APP,再打开 HttpCanary,开始抓取抖音数据。如下图所示:

HttpCanary 正在抓包

随便找个视频点赞,可以看到 HttpCanary 在不停的抓包。点开 HttpCanary,找带有 /aweme/v1/commit 字样的请求包:

抖音点赞数据包

3. 查看 HTTP 请求包

点开请求包,可以看到,这其实是一个普通 HTTP 报文,红线部分表示需要点赞的视频 ID。

抖音点赞数据包

请求信息中除了包含视频 ID 外,还包含了你的身份信息,这样抖音才知道这个视频是谁在点赞。

点赞请求

然后 APP 通过查看回复消息,判断点赞请求是否成功,如果成功,就可以将视频边上的小红心点亮了。

点赞回复

通过点赞数据包,我们可以清楚看到,抖音所有浏览,点赞,评论,发布视频等,其实都是通过一个个 HTTP 完成的。

4. 亲手做一个自动点赞爬虫

讲了那么多 HTTP 请求原理,对于普通小白来说,我们怎样才能做一个属于自己的爬虫呢?

其实很简单,只要照猫画虎,复制抖音 HTTP 请求,再原样发送就可以。

比如我想获取推荐视频,只要复制抖音推荐视频的 HTTP 请求,再原样发送就可以拿到推荐数据了。

本节我们就以上文中的点赞数据为例,请大家亲手做一个自动点赞的爬虫。

让我们先回到抖音,把刚才那个视频的点赞取消,这样才能看到爬虫的最终效果。

复制数据包

进入 HttpCanary,找到刚才的点赞包,点击右上角分享按钮,并选择分享 cURL,如下图所示:

复制数据包

粘贴数据包

复制完成后,HttpCanary 会提示检测到一个 cURL 请求,选择执行即可。

粘贴数据包

第一个自动点赞爬虫

可以看到,HttpCanary 发送了一模一样的点赞请求给抖音。点开查看回复数据,如果和上文的返回值一样,就表明你的点赞爬虫完成啦。

自动点赞爬虫

此时回到抖音 APP,查看我喜欢的视频,就可以看到刚才取消点赞的视频又回来了。

5. 做一个更全能的爬虫

通过刚才的练习,可以看到,只要我们能原样复制抖音数据包,就可以拿到所有想要的数据。

例如,复制首页视频请求,我们就能拿到推荐视频的标题,说明,点赞数量,评论数量等各种各样的数据。

小伙伴们也许有疑问,我们怎样才能搜集全部抖音数据呢?鉴于目前抖音的火爆程度,想要全部收集完其实不太可能,也没有必要。

聪明的小伙伴一定想到了,我们只要向抖音不停发送上划请求,就可以搜集很多首页推荐数据了。

如果你想做的更全能一些,还可以复制查看单用户视频的请求,把所有热门账号的视频数据都采集下来,就基本能替代第三方数据商了。

此外,你还可以修改 HTTP 请求,比如在首页请求中修改不同的地理位置,就可以看到不同地区的推荐视频和同城视频了。

6. 抖音守护神

看到这里,相信很多小伙伴已经跃跃欲试,准备大干一番了。但是别急,程序员小哥哥们可不会轻易让你们得逞。如果大家能随意点赞评论的话,抖音生态系统早就被玩坏了。

那么难点在哪里呢?我们还是回到刚才的请求包上,仔细看下图:

抖音守护神

其实抖音每一次 HTTP 请求,都会带上 x-khronos 和 x-gorgon 这两个参数。抖音会在每次请求中校验这两个参数,如果校验不通过,那么请求就无效啦。

这两个参数都干了什么呢?

第一个 x-khronos,是标识请求时间,采用 Unix 时间格式。比如 1586446631,表示离 1970 年 1 月 1 日 0 点 0 分过去 1586446631 秒,也就是 2020 年 4 月 9 日 23 点 37 分。如果抖音收到的请求时间离实际时间太远,就知道这个请求已经失效。

第二个 x-gorgon,用来校验请求合法性。如果你在请求中篡改了任何数据,比如篡改了点赞 ID,或者身份信息 (Cookie),这个请求都会被抖音查出是伪造的,就能有效防止用户乱刷数据了。

好奇宝宝们一定会问,这个 x-gorgon 是怎么算出来的呢?理论上和法律上来说,只有抖音小哥哥们才知道。不过一般情况,都是通过请求时间,请求 URL 和 Cookie 等信息综合计算得出的(以上纯属瞎猜,请遵守当地法律)。

7. 总结

简单一句话概括,只需要复制抖音 HTTP 请求,并完成 x-gorgon 校验,理论上你就可以做一个全能的抖音爬虫。不过再次提醒小伙伴们,一定要谨遵当地法律,也不要滥用爬虫给平台造成负担。

分类:
Android
标签:
分类:
Android
标签: