『异步反爬』别再说自己不会爬取『抖音』视频了!
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.下载视频到本地。