背景:
现在移动短视频大火,很多的内容消费都在手机的客户端上进行。为了监控类似抖音短视频平台上的风险数据(主要是视频标题、视频内容、评论区),采用爬虫技术手段来实时爬取内容。
技术方案:
python(脚本程序)+mitmproxy(代理服务器)+appium(自动化工具)
原理:
采用抓包的方式,通过设置代理服务器、以及设置https证书,让所有的http、https的请求和响应全部通过这个代理服务器来转发,然后利用脚本对转发的数据进行处理。
和fiddler、Charles等抓包工具对比,mitmproxy最大的优势是它提供了python脚本的对接入口,可以利用python来处理爬取到的数据。例如:下载视频文件,存储关键信息到我们自己的DB上等。
实现爬取抖音视频及标题数据
第一步:安装环境及工具
安装python环境
www.python.org/downloads/
安装mitmproxy代理工具
mitmproxy.org/
安装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 使用指南:
foofish.net/mitmproxy-t…
使用 mitmproxy + python 做拦截代理:(详尽)
blog.wolfogre.com/posts/usage…
python下载安装:(3.6以上)
www.python.org/downloads/
安装mitmproxy以及遇到的坑和简单用法:
www.jianshu.com/p/af381ef13…
mitmproxy的安装教程
zhuanlan.zhihu.com/p/33747453
mitmproxy下载界面:
github.com/mitmproxy/m…
mitmproxy下载界面:(推荐)
mitmproxy.org/
使用python爬取抖音app视频:
blog.csdn.net/weixin_4171…
靠谱的Pycharm安装详细教程:
www.cnblogs.com/dcpeng/p/90…
appium下载界面:
github.com/appium/appi…
Charles的安装及使用过程:(代理服务器)
www.cnblogs.com/littlek1d/p…
Charles和mitmproxy代理设置
www.cnblogs.com/knighterran…
mitmproxy的下载及证书配置(简书)
www.jianshu.com/p/036e5057f…
Pycharm No module named requests 的解决方法:
blog.csdn.net/u010475354/…
linux下载抖音模块:
juejin.im/post/5be136…
win10 python爬取数据:(推荐)
zhuanlan.zhihu.com/p/41492085
破解版Charles的安装:
blog.csdn.net/weixin_4284…