使用python批量下载抖音视频

使用python批量下载抖音视频

以下步骤在下载抖音“作品”和“喜欢”测试有效。
--2021年8月29日

打开抖音app

找到主页链接

如果想要下载自己的视频,找到自己的的二维码,右上角分享按钮点击后复制链接;

如果想要下载别人的视频,点击他主页的右上角,分享,复制链接即可复制主页链接。

找到请求的url

打开浏览器的调试工具,找到?sec_uid的字段,先复制下来。

分析url

参考https://www.cnblogs.com/yszr/p/14494070.html

下载视频

把url复制到下面,代码来自https://www.cnblogs.com/yszr/p/14494070.html ,做了一行修改,可以设置下载的视频保存的路径了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import requests
import json
from urllib import parse
import re

# Request URL:
url = "https://www.iesdouyin.com/web/api/v2/aweme/like/?sec_uid=MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M&count=21&max_cursor=0&aid=1128&_signature=RKo50gAAJNqj3cHUYlkR6kSqOc&dytk="

headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0"
}
r = requests.get(url=url, headers=headers, stream=True)
# 输出访问状态,如为<200>即为访问成功
print("初始访问状态:", r)
# 使用json解析获取的网页内容
data_json = json.loads(r.text)
# 使用json解析网页后,data_json的内容为dict格式,我们可以通过以下方式查看健名
print(data_json.keys())
print(data_json)

has_more = data_json['has_more']
max_cursor = data_json['max_cursor']

while has_more == True:
print('has_more:', has_more)
url_parsed = parse.urlparse(url) # 打散url连接
bits = list(url_parsed) # 将url连接区分开来
qs = parse.parse_qs(bits[4]) # 选择第四个元素
qs['max_cursor'] = max_cursor # 替换掉这个字段的值
bits[4] = parse.urlencode(qs, True) # 将替换的字段拼接起来,并且url拼接时不转义
url_new = parse.urlunparse(bits) # 重新拼接整个url

# 只要hasmore是否为true,则反复访问作者主页链接,直到成功返回这个为false
r = requests.get(url=url_new, headers=headers, stream=True)
data_json = json.loads(r.text)
has_more = data_json['has_more'] # 重置hasmore直到返回为false则退出循环
max_cursor = data_json['max_cursor'] # 每次重置这个页数,继续替换url中下一页页码进行访问
print('maxcursor22:', max_cursor)
for i in range(len(data_json['aweme_list'])):
# url_1为我们获取的视频链接
url_1 = data_json['aweme_list'][i]['video']['play_addr_lowbr']['url_list'][0]
# t为我们获取的视频标题
print(url_1)
t = data_json['aweme_list'][i]['desc']
# requests发送浏览器发送get请求,得到数据
r = requests.get(url=url_1, headers=headers, stream=True)
print(r) # 输出r访问状态
# 获取数据的二进制长度
reponse_body_lenth = int(r.headers.get("Content-Length"))
# 打印数据的长度
print("视频的数据长度为:", reponse_body_lenth)
# path_1为完整文件保存路径
path = '' + t + '.mp4'
# 去除文件名中特殊字符否则报错
rstr = r"[\/\\\:;\*#¥%$!@^……&()\?\"\<\>\|]" # '/ \ : * ? " < > |'
path = re.sub(rstr, "", path) # 替换为""
# 保存抖音视频mp4格式,二进制读取
# 设置保存文件的路径
path = "./videos/" + path
with open(path, "wb") as xh:
print(path)
# 先定义初始进度为0
write_all = 0
for chunk in r.iter_content(chunk_size=1000000):
write_all += xh.write(chunk)
# 打印下载进度
print("下载进度:%02.6f%%" % (100 * write_all / reponse_body_lenth))

本方法可以下载所有喜欢视频,也可以下载所有作品。

参考资料:https://www.cnblogs.com/yszr/p/14494070.html

作者

孤独小狼

发布于

2021-11-12

更新于

2021-11-12

许可协议

评论