所需软件
- 手机模拟器,下面以安卓模拟器(雷电模拟器)为例,下载地址: 官网
- Fiddler抓包工具,下载地址: 官网
- 编程工具,PyCharm,下载地址: 官网,安装教程
- xposedinstaller.apk 下载地址: 官网,如果手机安卓版本在 5.0 或更高版本,那么就到这个链接下载,后者的真实下载链接,可以直接点击下载。
- JustTrustMe.apk,Xposed+JustTrustMe两者配合,来关闭SSL证书验证
Fiddler配置
- Tools -> Options -> HTTPS : 勾选 Capture HTTPS CONNECTs,勾选 Decrypt HTTPS trafic ,会弹出安装证书的提示。一路点是或确定安装即可,勾选
Ignore server certificate errors(unsafe)
- Tools -> Options -> Connections : 勾选 Allow remote computers to connect (不勾选这个,手机会出现没有网络。)
Fiddler listens on port
默认8888,端口号也可以更改 我写的是8889 - 重启fiddler,依然停留在 HTTPS 选项卡,点击右侧Actions,能看一个下拉菜单,点击 Export Root Certificate to Desktop,此时证书会生成到桌面上,名为 FiddlerRoot.cer,点OK保存
模拟器配置
-
将xposedinstaller.apk 拖入雷电模拟器安装,点击Install之后,重启模拟器,再将JustTrustMe.apk拖入安装,在xposedinstaller模块中,勾选JustTrustMe模块
-
查看本机的IP地址,cmd中输入ipconfig,记下这个IP地址
-
确保模拟器和电脑在同一个网络下,有线网络或wifi均可
-
模拟器配置:设置-> 长按已连接网络,代理选择手动,输入代理服务器主机名(本机IP地址),输入Fiddler中的端口号8889(你自己设置的那个端口号)
-
安装证书有两种方式:
- 代理设置好后,在浏览器输入
https://IP地址:端口号
,如:https:// 192.168.1.191:8889
,打开Fiddler页面,点击fiddlerRoot certificate
安装证书,证书名称随意起,可能还需要设置一个锁屏密码 - 将桌面生成的 FiddlerRoot.cer 证书,雷电模拟器右侧 更多 -> 文件共享 (会打开手机内存文件夹,直接将证书复制进来即可),发送到手机内存。
- 代理设置好后,在浏览器输入
抓包
- Fiddler中开启解码decode操作
- 打开抖音,Fiddler,观察Fiddler中抓到的包。选择包类型为 json 的包,包的大小偏大,这个就是视频包。在Fiddler右侧,选择json,观察到aweme_list中的aweme_id,这便是分享链接的后半段字符
https://www.iesdouyin.com/share/video/6824336555822370056
,https://www.iesdouyin.com/share/video/+aweme_id
,
- 将Fiddler中的数据包导出来,导出json格式文件
Python提取数据
import os
import json
url_list = []#空列表,用来存储每个视频链接
json_list = os.listdir(r'C:\Users\MSYU\Desktop\Dump-0107-14-06-54\aweme.snssdk.com\aweme\v1\aweme\post')#获取路径下面的文件名单
count = 0#计数,用来计算一共有多少个视频链接
for json_every in json_list:#循环名单下的每个json文件
json_open = open(r'C:\Users\MSYU\Desktop\Dump-0107-14-06-54\aweme.snssdk.com\aweme\v1\aweme\post\{}'.format(json_every),encoding='utf-8')#打开json文件
json_py = json.load(json_open)#将json对象转换为python对象
for id in json_py['aweme_list']:
aweme_id = id['aweme_id']#获取到字典中aweme_id对应的ID字符串数字
share_url = 'https://www.iesdouyin.com/share/video/{}'.format(aweme_id)#拼接成抖音视频分享链接
url_list.append(share_url)#将每个链接添加到列表中
count += 1
with open(r'C:\Users\MSYU\Desktop\douyin.txt', 'w') as f:#新建一个douyin.txt文本
for url_every in url_list:
f.writelines(url_every + '\n')#将列表中的单个元素,写入到文本中,注意每行后面加个换行符
print('视频{}下载完成'.format(count))