背景
今天来分享一个python使用mitmproxy抓取抖音视频的思路
mitmproxy是什么我就不过多介绍了,其实就使用中间人抓包工具(mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为)
抓取思路
- 搭建mitmproxy抓取环境
- 编写mitmproxy脚本
- 手机设置和电脑在同一网络上,并设置手机代理指向mitmproxy服务
- 打开抖音,抓取抖音视频地址数据并下载
mitmproxy环境搭建
pip install mitmproxy
编写mitmproxy下载抖音脚本
将下面代码保存douyin.py
import json
import wget
# 定义函数,flow代表经过中间人的所有数据
def response(flow):
print(flow.request.url)
# 如果经过中间人的请求中有以url或者url1开头请求,我就解析它的响应
url = 'https://aweme.snssdk.com/aweme/v1/feed/'
url1 = 'https://api.amemv.com/aweme/v1/feed/'
if flow.request.url.startswith(url) or flow.request.url.startswith(url1):
resp = flow.response.text
data = json.loads(resp)
# 解析url地址和视频名称
url_list = data['aweme_list']
for url in url_list:
video_url = url['video']['play_addr']['url_list'][0]
video_name = url['desc']
# 利用下载神器wget进行下载,并保存本地(这里大家自由发挥,也可以存数据库什么的)
wget.download(url=video_url, out='D:\\workspace\\python\\douyin\\downloads\\{}'.format(video_name))
启动mitmproxy
mitmdump -p 8080 -s douyin.py
设置手机代理
代理ip是电脑的ip,端口是8080,一定要确保端口能外部访问(windows有时候防火墙会屏蔽端口)
手机上在wifi设置上有代理设置,设置下就可以(android和ios不一样,不明白的可以自行搜索下)
手机上打开浏览器mimt.it
下载对应版本证书并安装
手机上打开抖音
这时候mitmproxy会自动下载保存抖音视频