准备工作:
(1)、安卓模拟器
(2)、抓包工具:Fiddler
(3)、编程工具:pycharm
(4)、安卓模拟器上安装抖音
(5)、本地创建保存json文件及下载视频文件夹(例G:\software\fid和G:\software\video)
fidder配置
在Tools中的options中,按下图勾选
fidder配置1.jpg
配置远程连接:
选择允许监控远程连接,端口可以任意设置,默认8888
fedder配置2.jpg
然后重启fidder使配置生效。
安卓模拟器配置
查看本机ip:在cmd中输入ipconfig
本机ip.jpg
手机确保和电脑在同一局域网下。
模拟器配置:设置中长按WIFI,代理选择手动,然后输入上图ip端口号
修改模拟器网络配置.jpg
代理设置好后,在浏览器中输入你设置的ip:端口号,(例如192.168.43.178:4263)回车打开fidder页面。然后点击fidderRootcertificate,证书名随便设,可能还需要一个锁屏密码。
手机下载证书.jpg
接下来就是在fidder中抓取抖音的包
抖音抓包
打开抖音,然后观察fidder中的所有包
fidder包.jpg
点击这个json包,解码
解码.jpg
解码后:点击aweme_list,一个大括号代表一个视频
解码后.jpg
重新加载。
视屏链接:aweme_list中,每个视屏下的video下的play_addr下的url_list中。
视屏链接.jpg
将json包保存到本地
点击脚本规则,定义规则放在如下图所示处:
重定义脚本规则.jpg
if (oSession.uriContains("https://api3-core-c-hl.amemv.com/aweme/v1/aweme/post/")){
var strBody=oSession.GetResponseBodyAsString();
var sps = oSession.PathAndQuery.slice(-58,);
//FiddlerObject.alert(sps)
var filename = "G:/software/fid" + "/" + sps + ".json";
var curDate = new Date();
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){
sw = System.IO.File.AppendText(filename);
sw.Write(strBody);
}
else{ sw = System.IO.File.CreateText(filename);
sw.Write(strBody);
}
sw.Close(); 弳
sw.Dispose();
}
注意
-
第一行网址(随时更新):
链接获取及查看.jpg -
路径,即保存json文件路径。
本地下载好json包.jpg
记得点击Save Script保存
下边是我保存好的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'}
videos_list = os.listdir('G:/software/fid/') #获取文件夹内所有json包名
count = 1 #计数,用来作为视频名字
for videos in videos_list: #循环json列表,对每个json包进行操作
a = open('G:/software/fid/{}'.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'][1] #获取视频url,每个视频有4个url,我选的第2个
videoMp4 = requests.get(video_url,headers=headers).content #获取视频二进制代码
with open('G:/software/video/{}.mp4'.format(count),'wb') as f: #以二进制方式写入路径,记住要先创建路径
f.write(videoMp4) #写入
print('视频{}下载完成'.format(count)) #下载提示
count += 1 #计数+1
运行代码:
运行成功显示.jpg 本地视屏下载显示.jpg
总结
当然,我是手动滑动抖音爬取的,后期会出控制模拟器自动滑动爬取抖音视频下载。
网友评论