注册

Fiddler抓取抖音视频数据



本文仅供参考学习,禁止用于任何形式的商业用途,违者自行承担责任。

准备工作:

  1. 手机(安卓、ios都可以)/安卓模拟器,今天主要以安卓模拟器为主,操作过程一致。

  2. 抓包工具:Fiddel 下载地址:(https://www.telerik.com/download/fiddler

  3. 编程工具:pycharm

  4. 安卓模拟器上安装抖音(逍遥安装模拟器)

一、fiddler配置

在tools中的options中,按照图中勾选后点击Actions

956023c956c6bfea5b88541700b91898.png
配置远程链接:

选择允许监控远程链接,端口可以随意设置,只要别重复就行,默认8888

80566fee76fb48361f2446f26ef01232.png
然后:重启fiddler!!!这样配置才能生效。

二、安卓模拟器/手机配置

首先查看本机的IP:在cmd中输入ipconfig,记住这个IP

302cd30c12e85f092fef4c4a35efeb6b.png
手机确保和电脑在同一局域网下。

手机配置:配置已连接的WiFi,代理选择手动,然后输入上图ip端口号为8888

模拟器配置:设置中长按已连接wifi,代理选择手动,然后输入上图ip端口号为8888

8290adf988ae5c65c41ea7ebe67e9ade.png

09d9d9ce25a1b3b079b44b911f34dc66.png

代理设置好后,在浏览器中输入你设置的ip:端口,例如10.10.16.194:8888,就会打开fiddler的页面。然后点击fiddlerRoot certificate安装证书,要不手机会认为环境不安全。

证书名称随便设,可能还需要设置一个锁屏密码。

f41b96f8bea265c839a45aea04999588.png
接下来就可以在fiddler中抓到手机/模拟器软件的包了。

三、抖音抓包

打开抖音,然后观察fiddler中所有的包

2bbe52df0b19de44e99950c83fc87d8d.png
其中有个包,包类型为json(json就是网页返回的数据,具体百度),主机地址如图,包大小一般不小,这个就是视频包。
b574edd66cc1a97041b84015d81d868f.png
点击这个json包,在fidder右侧,点击解码,我们将视频包的json解码
559b922aaaced818f7f078bb05bdf38d.png

解码后:点击aweme_list,其中每个大括号代表一个视频,这个和bilibili弹幕或者快手一样,每次加载一点出来,等你看完预加载的,再重新加载一些。

8aaacac2fa5ff71faf6a39072412f74c.png
Json是一个字典,我们的视频链接在:aweme_list中,每个视频下的video下的play_addr下的url_list中,一共有6个url,是完全一样的视频,可能是为了应付不同环境,但是一般第3或4个链接的视频不容易出问题,复制链接,浏览器中粘贴就能看到视频了。

85a0c746706e9cc9160aeaf920b58570.png
接下来解决几个问题

1、视频数量,每个包中只有这么几个视频,那如何抓取更多呢?

这时候需要借助模拟器的模拟鼠标翻页,让模拟器一直翻页,这样就不断会出现json包了。

14436b3b630ec2a6462a7a113d97148c.png
2、如何json保存在本地使用

一种方法可以手动复制粘贴,但是这样很low。

所以我们使用fidder自带的脚本,在里面添加规则,当视频json包刷出来后自动保存json包。

自定义规则包:

链接:https://pan.baidu.com/s/1wmtUUMChzuSDZFYGSyUhCg

提取码:7z0l

点击规则脚本,然后将自定义规则放在如图所示位置:

6a6556d6c4658664dfc7943301846714.png
这个脚本有两点需要修改的:

(1)第一行的网址

这个是从视频包的url中摘出来的,抖音会时不时更新这个url,所以不能用了也要去更新:

比如现在的已经和昨天不同了,记着修改。
47b4cf9070325c7e960c191f8f40a5e0.png
(2)路径,那个是我设置json包保存的地址,自己一定要去修改,并创建文件夹,修改完记着点保存。

233493a9eeecf3c87f0608415bef1aed.png
打开设置好模拟器和脚本后,等待一会,就可以看到文件夹中保存的包了:
08f1b7188be67e443528f96f8fa14f95.png

四、爬虫脚本

接下来在pycharm中写脚本获取json包里的视频链接:

导包:

import os,json,requests

伪装头:

headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36’}

逻辑代码:
a53c26251be5bea1717577788a31e29c.png
运行代码:

96576c7149272e671b65ecb913f426b3.png
效果:

09cafa20b87386bae92fa96c111cda68.png

源码:

import os, json, requests# 伪装头
headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
}
videos_list = os.listdir(
   'C:/Users/HEXU/Desktop/抖音数据爬取/抖音爬取资料/raw_data/')# 获取文件夹内所有json包名
count = 1# 计数, 用来作为视频名字
for videos in videos_list: #循环json列表, 对每个json包进行操作
a = open('./抖音爬取资料/raw_data/{}'.format(videos), encoding = 'utf-8')# 打开json包
content = json.load(a)['aweme_list']# 取出json包中所有视频
for video in content: #循环视频列表, 选取每个视频
video_url = video['video']['play_addr']['url_list'][4]# 获取视频url, 每个视频有6个url, 我选的第5个
videoMp4 = requests.request('get', video_url, headers = headers).content# 获取视频二进制代码
with open('./抖音爬取资料/VIDEO/{}.mp4'.format(count), 'wb') as f: #
   以二进制方式写入路径, 记住要先创建路径
f.write(videoMp4)# 写入
print('视频{}下载完成'.format(count))# 下载提示
count += 1# 计数 + 1
作者:冬晨夕阳
来源:https://blog.51cto.com/lixi/3022373

0 个评论

要回复文章请先登录注册