1、代码
import os
import re
from concurrent.futures import ThreadPoolExecutor
import requests
def get_urls(max_cursor):
# 请求头 (页面获取)
headers = {
'Cookie': '',
'Referer': '',
'User-Agent': ''
}
# 请求地址(页面获取)
url = ''
# max_cursor 为分页游标
pattern = r'max_cursor=(\d+)'
match = re.search(pattern, url)
if match:
result = match.group(1)
url = url.replace(result, str(max_cursor))
# 获取视频列表
res = requests.get(url, headers=headers)
data = res.json()
d = {}
aweme_list = data.get("aweme_list")
for aweme in aweme_list:
# 防止有视频同名:加上aweme_id
title = aweme.get("desc") + aweme.get("aweme_id")
url = aweme.get("video").get("play_addr").get("url_list")[-1]
d[title] = url
# 是否有下一页
has_more = data.get("has_more")
if has_more == 1:
dd = get_urls(data.get("max_cursor"))
d.update(dd)
return d
def download(name, url):
res = requests.get(url)
# 视频存储
with open(f"../mv/{name}.mp4", "wb") as f:
f.write(res.content)
print('success --> address: ', url)
def main():
# 获取所有视频地址
d = get_urls(0)
# 文件存放路径
os.makedirs('../mv', exist_ok=True)
# 多线程下载视频
with ThreadPoolExecutor(10) as t:
for item in d.items():
t.submit(download,item[0], item[1])
if __name__ == '__main__':
main()
2、安装依赖
终端执行以下命令:
pip install requests
3、参数获取
浏览器按F12
(或者鼠标右键,点击检查
) ⇒ 点击网络
⇒ 在输入框输入post
,选择第一个post请求
。
在常规里可以找到请求网址,就是 url
在请求标头里可以找到 Cookie
、Referer
、User-Agen
这三个参数,ctrl+c v
替换即可。
4、视频存储路径说明
上述代码里有一行是
with open(f"../mv/{name}.mp4", "wb") as f:
视频存储在当前目录的上一级目录下的mv目录中。