共计 2553 个字符,预计需要花费 7 分钟才能阅读完成。
这段时间始终在解决数据采集的问题,目前平台数据采集趋于稳定,能够抽出工夫来整顿一下近期的成绩,顺便介绍一些近期用到的技术。本篇文章偏差技术,须要读者有肯定的技术根底,次要介绍数据采集过程中用到的神器 mitmproxy,以及平台的一些技术设计。以下是数据采集整体的设计,右边是客户机,在外面搁置了不同的采集器,采集器发动申请之后,通过 mitmproxy 拜访抖音,等数据回传之后,通过两头的解析器对数据进行解析,最初分门别类的存储到数据库中,为了晋升性能,在两头退出了缓存,把采集器和解析器分隔开,两个模块之间工作互不影响,能够最大限度的把数据入库,下图为第一代架构设计,后续会有一篇文章介绍平台架构设计的三代演化史。
筹备工作
开始进入数据采集的筹备工作,第一步天然是环境搭建,本次咱们在 windows 环境下,采纳 python3.6.6 环境,抓包和代理工具是 mitmproxy,也能够应用 Fiddler 抓包,采纳夜神模拟器来模仿安卓运行环境(也能够用真机),这次次要通过手动滑动 app 来抓取数据,下次介绍采纳 Appium 自动化工具,实现数据采集的全自动(解放双手)。
1、装置 python3.6.6 环境,装置过程可自行百度,须要留神的是,centos7 自带的是 python2.7,须要降级到 python3.6.6 环境,降级之前次要先装置 ssl 模块,否则降级好的版本无法访问 https 的申请。
2、装置 mitmproxy,装置好 python 环境后,在命令行执行 pip install mitmproxy 装置 mitmproxy,注:windows 下只有 mitmdump 和 mitmweb 能够应用,装置好后在命令行输出 mitmdump 即可启动,默认启动的代理端口为 8080。
3、装置夜神模拟器,能够在官网下载安装包,装置教程自行百度即可,根本都是下一步。装置好夜神模拟器之后,须要对夜神模拟器进行配置。首先须要设置模拟器的网络为手动代理,IP 地址为 windows 的 IP,端口为 mitmproxy 的代理端口。
4、接下来是证书的装置,关上模拟器中的浏览器,输出地址 mitm.it,抉择对应版本的证书,装置好后,就能够进行抓包了。
5、装置 app,app 安装包能够到官网下载,而后通过拖拽进模拟器就能够装置,或者在利用市场进行装置。
至此,本次数据采集环境就全副搭建实现。
数据接口分析 抓包
搭建好环境之后就开始对抖音 app 进行数据抓包,剖析出每个性能所应用的接口,本次以采集视频数据接口为例介绍。
敞开之前关上的 mitmdump,从新关上 mitmweb 工具,mitmweb 是一个图形化的版本,就不必对着黑框框找了,如下图:
启动之后关上模拟器的抖音 app,能够看到曾经有数据包解析进去了,而后进入用户主页,开始下滑视频,在数据包列表中能够找到申请视频数据的接口 https://aweme.snssdk.com/aweme/v1/aweme/post/
能够在左边看到接口的申请数据和响应数据,咱们将响应数据复制进去,进入下一步解析。
数据解析
通过 mitmproxy 和 python 代码的联合,咱们就能够在代码中获取到 mitmproxy 中的数据包,进而能够依照需要来解决。新建一个 test.py 文件,外面放两个办法:
def request(flow):
pass
def response(flow):
pass
见名知意,这两个办法,一个是在申请的时候执行的,一个是在响应的时候执行,而数据包则存在于 flow 当中。通过 flow.request.url 能够获取到申请 url,flow.request.headers 能够获取到申请头信息,flow.response.text 中的就是响应的数据了。
def response(flow):
if str(flow.request.url).startswith("https://aweme.snssdk.com/aweme/v1/aweme/post/"):
index_response_dict = json.loads(flow.response.text)
aweme_list = index_response_dict.get('aweme_list')
if aweme_list:
for aweme in aweme_list:
print(aweme)
这个 aweme 就是一个残缺的视频数据了,能够依据须要提取外面的信息,这里提取局部信息做介绍。
"statistics":{
"aweme_id":"6765058962225204493",
"comment_count":24,
"digg_count":1465,
"download_count":1,
"play_count":0,
"share_count":3,
"forward_count":0,
"lose_count":0,
"lose_comment_count":0
}
statistics 信息就是这个视频的点赞,评论,下载,转发的数据。
share_url 为视频的分享地址,通过这个地址,能够在 PC 端观看抖音分享的视频,也能够通过这个链接解析到无水印视频。
play_addr 为视频的播放信息,其中的 url_list 即为无水印地址,不过目前官网做了解决,这个地址无奈间接播放,也有工夫限度,超时之后链接就生效了。
有了这个 aweme,就能够把外面的信息解析进去,保留到本人的数据库,或者下载无水印视频,保留到本人电脑了。
写好代码之后,保留 test.py 文件,cmd 进入命令行,进入到保留 test.py 文件目录下,在命令行输出 mitmdump -s test.py,mitmdump 就启动了,此时关上 app,开始滑动模拟器,进入用户主页:
开始一直下滑,test.py 文件就能够把抓取到的视频数据全副解析进去了,以下是我截取的局部数据信息:
视频信息:
视频统计数据:
视频评论数据:
无水印视频下载:
本次介绍就到这里完结了,次要是使用 mitmdump 配合 python 代码来解析数据,下次讲讲怎么使用 appium,怎么实现自动化滑动模拟器,实现这个程序的全自动抓取视频数据,以及把采集下来的数据进行解决之后,失去的一些成绩展现。
更多抖音,快手,小红书数据实时采集接口,请查看文档:TiToData