(1)下载fiddler抓取包:配置fiddler,关闭防火墙:手机下载证书并信任。
(2)更改手机ip,手机没网,操作注册cmd进入管理员界面,输入regedit
参考链接:https://jingyan.baidu.com/article/e5c39bf5f4f8d439d760338e.html
(3)逍遥模拟器下载地址:http://soft.onlinedown.net/soft/266828.htm
(4)模拟器上下载fiddler证书:本电脑ip+fiddler上设置的端口
fiddler配置参考链接:https://www.cnblogs.com/woaixuexi9999/p/9247705.html
下载完证书去模拟器的下载里找,然后进行操作,成功后fiddler可监控模拟器上面的请求
抖音下载后方可当手机一样使用:
(5)fiddler链接手机后谷歌浏览器报错:访问地址不安全:
参考链接:https://blog.csdn.net/qq_26916671/article/details/99412994
(6)在访问请求地址https://aweme-hl.snssdk.com/aweme/v1/aweme/post/?
在json中找到视频地址:
在fiddler中添加下载视频代码:注意两点:
(1)get后面的路径要随时看进行更换
(2)下载的路径要在fiddler下面自己新建
###########判断地址可能有变动,需要自行修改
if (oSession.uriContains("https://aweme-hl.snssdk.com/aweme/v1/aweme/post/")){
var strBody=oSession.GetResponseBodyAsString();
var sps = oSession.PathAndQuery.slice(-58,);
//FiddlerObject.alert(sps)
var filename = "C:\抖音视频资料" + "/" + 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();
}
此段代码放到fiddler中的script的response中,如下图:添加好之后别忘记保存!!
程序执行代码:
import os,json,requests
#伪装头
import pymysql
db_name = 'douyin'
db_user = 'root'
db_pass = '你自己的密码'
db_ip = 'localhost'
db_port = 3306
def main():
'''
解析json包,获取数据
:return:
'''
headers = {
#你自己浏览器的版本********************
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
videos_list = os.listdir(r'C:\Users\liangxue\AppData\Local\Programs\Fiddler\抖音视频资料') # 获取文件夹内所有json包名
count = 1 # 计数,用来作为视频名字
for videos in videos_list: # 循环json列表,对每个json包进行操作
a = open(r'C:\Users\liangxue\AppData\Local\Programs\Fiddler\抖音视频资料/{}'.format(videos), encoding='utf-8') # 打开json包
content = json.load(a)['aweme_list'] # 取出json包中所有视频
print("content=========", content)
for video in content: # 循环视频列表,选取每个视频
video_id=video['video']['play_addr']["uri"]
print("作品id===",video_id)
video_nickname = video["author"]["nickname"]
print("昵称=====", video_nickname)
video_thumb= video["music"]["cover_large"]["url_list"][0]
print("封面", video_thumb)
video_title= video["desc"]
print("标题==========", video_title)
video_url = video['video']['play_addr']['url_list'][0]#每个视频有几个地址,选其中一个
print("视频链接地址=========", video_url, len(video_url))
videoMp4 = requests.request('get', video_url, headers=headers).content # 获取视频二进制代码
sql = """ INSERT INTO douyin(video_url,video_title,video_nickname,video_thumb,video_id) VALUES(%s,%s,%s,%s,%s)"""
data = (video_url, video_title,video_nickname,video_thumb,video_id)
writemysql(sql, data)
with open('./video_list/{}.mp4'.format(count), 'wb') as f: # 以二进制方式写入路径,记住要先创建路径
f.write(videoMp4) # 写入
print('视频{}下载完成'.format(count)) # 下载提示
count += 1 # 计数+1
def writemysql(sql, db_data=()):
'''
数据库操作
:param sql:
:param db_data:
:return:
'''
print("进入数据库操作")
try:
conn = pymysql.connect(db=db_name, user=db_user, passwd=db_pass, host=db_ip, port=int(db_port),charset="utf8mb4")
cursor = conn.cursor()
cursor.execute(sql, db_data)
conn.commit()
cursor.close()
conn.close()
except Exception as e:
print("数据库写入失败=========", e)
return
return True
if __name__ == "__main__":
main()
错误:爬完一个人的作品,爬下一个的时候需要把json包删除再爬下一个(可能你不需要删除再爬取)如下图:
爬取结果展示:
(1)抖音属于手机APP,电脑上没有办法直接得到访问路径请求,需要下载fiddler链接抓取包!
fiddler配置及下载信任证书并信任!
(2)下载模拟器,模拟手机操作抖音,fiddler实时监控模拟器上的动作,得到请求地址!
模拟器上下载fiddler证书并信任,模拟器上下载抖音,模仿手机操作,
!让抖音平台认为是用户手机浏览操作
(3)分享得到的地址中的josn数据包中的数据,找到自己想要的数据!
awenm_list----->{}----->video----->paly_addr----->url_list
(4)fiddler的scfipt中添加下载视频地址的代码!
注意四点:
1:get后面的路径要随时看进行更换
2:下载的路径要在fiddler下面自己新建
3:代码添加到response而不是request中
4:添加后一定要保存,关闭重启fiddler
(5)模拟器的抖音界面,进入某个用户的主页,浏览视频再执行pycharm中的代码方可下载视频
(6)爬取一个用户后报错json包的错,需要把文件删除再重新生成!(因人而异)
(7)视频有有效期,并非可永久使用!
拿走不谢,有更好的方法请分享给我,谢谢!
如有帮助请点赞支持,错误请指出,互相学习,谢谢!