其他
『异步反爬』别再说自己不会爬取『抖音』视频了!
1
前言
遇到『异步反爬』大家不知道怎么解决!今天就以『抖音』为实战案例,为大家讲解『异步反爬』应该怎么去处理!
同时也教大家怎么去爬取『抖音』视频,看完这篇文章,你以后不要再说:自己不会爬取抖音视频了!
2
准备工作
1.手机端操作
选择其中一个用户(家味美食),进入用户主页,然后点击右上角。
点击分享
复制链接
2.提取链接
提取好的链接如下:
https://v.douyin.com/e8g1kCq/
3
异步分析
1.查看数据包
从上面提取出来的链接是短链接,放到浏览器中运行则变成长链接
- https://v.douyin.com/e8g1kCq/
+ https://www.iesdouyin.com/share/user/77088058644?sec_uid=MS4wLjABAAAAumvAfskbDW1CB77yOudtt4ecmpi3Mkdm8XCkrTfRZPQ&did=70817958123&iid=2463339548275629&app=aweme&utm_campaign=client_share&utm_medium=ios&tt_from=copy&utm_source=copy
找到下面这个数据包
https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAumvAfskbDW1CB77yOudtt4ecmpi3Mkdm8XCkrTfRZPQ&count=21&max_cursor=0&aid=1128&_signature=q3mkJgAAyzVDo4ZbT2T9Cqt5pD&dytk=
2.分析链接
分析链接分析,只有三个参数是需要改变的。
+ sec_uid(用户id)
+ count(返回数)最多是34
+ max_cursor(下一页)
3.获取数据
写代码之前先看一下获取的数据有哪些,将链接放到浏览器里去看一下。
+ has_more 判断是否还有下一页
+ max_cursor 作为获取下一页标志
+ aweme_list 存放视频信息
+ aweme_list列表中,desc是对应视频名称
+ video->play_addr->url_list存放着视频mp4地址
下面开始编程实现
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
"Accept": "application/json,text/javascript,*/*; q=0.01",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip,deflate, br",
"X-Requested-With": "XMLHttpRequest",
'Access-Control-Allow-Origin': '*',
"Connection": "keep-alive"
}
url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid="+str(sec_uid)+"&count="+str(count)+"&max_cursor="+str(max_cursor)+"&aid=1128&_signature=z1epBAAArxEnjYt5fPWXJs9XqR&dytk="
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
da = json.loads(r.text)
aweme_list = da['aweme_list']
has_more = da['has_more']
for i in aweme_list:
title = i['desc']
video_url = i['video']['play_addr']['url_list'][0]
print(title)
print(video_url)
4.下载视频到本地
###下载视频
def down(name,url):
headers_down = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36',
}
r = requests.get(url,headers=headers_down)
with open("lyc/"+str(name)+".mp4", 'wb+') as f:
f.write(r.content)
定义了一个下载视频的函数,视频最终保存到lyc文件夹中。
4
获取下一页链接
1.下载视频到本地
获取当前页请求返回的max_cursor,替换当前页的max_cursor。
while(has_more):
url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid="+str(sec_uid)+"&count="+str(count)+"&max_cursor="+str(max_cursor)+"&aid=1128&_signature=z1epBAAArxEnjYt5fPWXJs9XqR&dytk="
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
da = json.loads(r.text)
aweme_list = da['aweme_list']
has_more = da['has_more']
for i in aweme_list:
title = i['desc']
video_url = i['video']['play_addr']['url_list'][0]
videotitle_list.append(title)
down(title,video_url)
print(title+"-下载完成!")
videotitle_list = list(set(videotitle_list))
print(len(videotitle_list))
if has_more:
max_cursor = da['max_cursor']
else:
break
5
总结
1.获取抖音视频名称和真实mp4播放地址,解决『异步反爬』 问题。
2.解析下一页链接。
3.下载视频到本地。
如果大家对本文代码源码感兴趣,扫码关注『Python爬虫数据分析挖掘』后台回复:抖音视频 ,获取完整代码!
本文代码讲解视频!
------------- 推荐阅读 -------------
1.python实战破解『梨视频』反爬机制,轻松实现批量视频下载!
2.爬取3w条『各种品牌』笔记本电脑数据,统计分析并进行可视化展示!真好看~