这段时间始终在解决数据采集的问题,目前平台数据采集趋于稳定,能够抽出工夫来整顿一下近期的成绩,顺便介绍一些近期用到的技术。本篇文章偏差技术,须要读者有肯定的技术根底,次要介绍数据采集过程中用到的神器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): passdef 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