最近公司对抖音视频有些需求,但是下载下来都带水印,所以自己写了个无水印下载视频
import requests
import re
from glom import *
def get_video(url):
requests.packages.urllib3.disable_warnings()
session = requests.session()
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'}
# 分享链接返回url 获取sec_uid
res = session.get(url=url, headers=headers, verify=False)
seu_udi = re.findall(r'sec_uid=(\w+-\w+-\w+|\w+-\w+|\w+)', res.url)
# 获取视频数量总数 用户名
sum_url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid={0}'.format(seu_udi[0])
se = session.get(sum_url).json()
video_count = glom(se, 'user_info.aweme_count')
print("用户名:%s" % glom(se, 'user_info.nickname'))
print("视频数量:%s" % video_count)
print("粉丝数量:%s" % glom(se, 'user_info.total_favorited'))
print("本人关注:%s" % glom(se, 'user_info.favoriting_count'))
max_cursor = 0
id = 0
while True:
while True:
if (max_cursor == 0):
sec_id_url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid={0}&count=21&max_cursor=0&aid=1128&_signature=dF8skQAAK0iTKNSXi9av.XRfLI&dytk=".format(
seu_udi[0])
else:
sec_id_url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid={0}&count=21&max_cursor={1}&aid=1128&_signature=dF8skQAAK0iTKNSXi9av.XRfLI&dytk=".format(
seu_udi[0], max_cursor)
sec_respone = session.get(url=sec_id_url, headers=headers, verify=False)
comment = sec_respone.json()
if (len(comment['aweme_list']) == 0):
continue
else:
break
# 下一页下标
max_cursor = comment['max_cursor']
for s in comment['aweme_list']:
id += 1
# 视频名称
text = s['desc']
# 点赞数
dianzan = s['statistics']["digg_count"]
# 评论数
pinglun = s['statistics']["comment_count"]
# 分享数
fenxiang = s['statistics']["share_count"]
# 无水印视频链接地址
video_url = s['video']['play_addr_lowbr']['url_list'][0]
text = re.sub("(\#\w+)|(\@\w+)",'',text)
print(
str(id) + "、视频名称为:{0},点赞数为:{1},评论数为:{2},分享数量为:{3},视频无水印地址为:{4}".format(text, str(dianzan), str(pinglun),
str(fenxiang), video_url))
try:
ir = session.get(video_url, headers=headers, verify=False)
open('F:/ceshi/背景/%s.mp4' % text, 'wb').write(ir.content)
except Exception as e:
continue
if(int(id) >= int(video_count)):
break
if __name__ == '__main__':
# https://v.douyin.com/JPrEHjx/
url = input("请输入分享链接:")
get_video(url)