python使用mitmproxy抓取抖音视频的思路

背景

今天来分享一个python使用mitmproxy抓取抖音视频的思路

mitmproxy是什么我就不过多介绍了,其实就使用中间人抓包工具(mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为)

抓取思路

  1. 搭建mitmproxy抓取环境
  2. 编写mitmproxy脚本
  3. 手机设置和电脑在同一网络上,并设置手机代理指向mitmproxy服务
  4. 打开抖音,抓取抖音视频地址数据并下载

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会自动下载保存抖音视频