爬取抖音数据实践方案《基础版》

3,956 阅读3分钟
背景:
现在移动短视频大火,很多的内容消费都在手机的客户端上进行。为了监控类似抖音短视频平台上的风险数据(主要是视频标题、视频内容、评论区),采用爬虫技术手段来实时爬取内容。

技术方案:
python(脚本程序)+mitmproxy(代理服务器)+appium(自动化工具)

原理:
采用抓包的方式,通过设置代理服务器、以及设置https证书,让所有的http、https的请求和响应全部通过这个代理服务器来转发,然后利用脚本对转发的数据进行处理。

和fiddler、Charles等抓包工具对比,mitmproxy最大的优势是它提供了python脚本的对接入口,可以利用python来处理爬取到的数据。例如:下载视频文件,存储关键信息到我们自己的DB上等。


实现爬取抖音视频及标题数据

第一步:安装环境及工具

安装python环境

安装mitmproxy代理工具

安装appium自动化工具(目前没用到)

第二步:设置代理相关
(为支持https请求需安装证书)

1.安装完mitmproxy后,会在如下目录生成证书文件。
2.安装mitmproxy的pc证书

双击mitmproxy-ca.p12证书进行安装,弹出如下窗口:
点击下一步,如下:
点击下一步,如下:
点击下一步,如下:(注意这里密码默认为空)
点击下一步,如下。再点击完成即可。

3.安装mitmproxy的手机客户端证书

把上图中mitmproxy-ca-cert.pem文件导入手机随便一个位置,接着找到手机的设置入口,根据各自手机的情况,反正就是找到并安装上这个证书即可。(这里不细述,苹果手机需信任之类的操作)

4.设置手机代理,把手机请求指向本地电脑的mitmproxy代理。
cmd-->ipconfig-->IPv4地址
设置手机

第三步:启动代理,爬取数据

编写python爬取抖音内容脚本douyin.py,存放在site-packages目录下:

#douyin.py
import json,os
import requests
def response(flow):
    #分析数据发现这是抖音旧的视频请求地址(估计是防爬取定时换的吧)
    #url='https://api.amemv.com/aweme/v1/aweme/post/'
    url='https://api-hl.amemv.com/aweme/v1/aweme/post/'
    #筛选出以上面url为开头的url
    if flow.request.url.startswith(url):
        text=flow.response.text
        #将已编码的json字符串解码为python对象
        data=json.loads(text)
        #print(data)
        #在charles中刚刚看到每一个视频的所有信息
        #都在aweme_list中
        video_url=data['aweme_list']
        path='D:/crawler_data/douyin'
		#path='D:\crawler_data\douyin'
        if not os.path.exists(path):
            os.mkdir(path)
        for each in video_url:
            #视频描述
            desc=each['desc']
            url=each['video']['play_addr']['url_list'][0]
            # print(desc,url)
            filename=path+'/'+desc+'.mp4'
            # print(filename)
            req=requests.get(url=url,verify=False)
            with open(filename,'ab') as f:
                f.write(req.content)
                f.flush()
                print(filename,'下载完毕')

以加载python的方式启动mitmproxy代理:
(需先cd到site-packages目录,然后执行如下命令)
mitmdump -s douyin.py

需要注意:
1)douyin.py存放在python的安裝目录下,不然会报requests模块找不到。

第四步:手工滑动抖音,实时查看抖音视频数据。
(后面可借助appium自动化工具模拟滑动动作)

根据抓包,分析抖音数据结构:
mitmdump上实时打印的抓包数据:
实时下载的抖音视频:

展望及不足:
1)python脚本比较简陋,现在还不支持数据过滤及入库。
2)只是简单的技术验证,如上面提到的,抖音的视频地址可能会变,到时就需要维护成本。
3)如需落地监控,需训练视频内容、邮件通知、视频查阅(可通过定时上传百度云实现视频播放)等。

相关参考资料:
mitmproxy 使用指南:

使用 mitmproxy + python 做拦截代理:(详尽)

python下载安装:(3.6以上)

安装mitmproxy以及遇到的坑和简单用法:

mitmproxy的安装教程

mitmproxy下载界面:
mitmproxy下载界面:(推荐)

使用python爬取抖音app视频:

靠谱的Pycharm安装详细教程:

appium下载界面:

Charles的安装及使用过程:(代理服务器)

Charles和mitmproxy代理设置

mitmproxy的下载及证书配置(简书)

Pycharm No module named requests 的解决方法:

linux下载抖音模块:

win10 python爬取数据:(推荐)

破解版Charles的安装: