根据抖音账号的分享链接下载无水印视频

最近公司对抖音视频有些需求,但是下载下来都带水印,所以自己写了个无水印下载视频

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)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频下载通常需要使用第三方工具来实现,以下是使用C++实现的简单示例: 首先,需要使用C++的网络库来进行HTTP请求,这里以CURL为例。可以使用以下命令安装CURL: ``` sudo apt-get install libcurl4-openssl-dev ``` 然后,可以使用以下代码来下载水印视频: ```cpp #include <iostream> #include <curl/curl.h> using namespace std; int main() { // 水印视频 string videoUrl = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=VIDEO_ID"; // VIDEO_ID为具体视频的ID,可以从分享中获取 // 初始化CURL CURL *curl = curl_easy_init(); if (curl) { // 设置请求参数 curl_easy_setopt(curl, CURLOPT_URL, videoUrl.c_str()); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // 将响应结果存储到内存中 string response; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](char *data, size_t size, size_t nmemb, string *writerData) { writerData->append(data, size * nmemb); return size * nmemb; }); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); // 发送请求 CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << endl; } // 解析响应结果,获取无水印视频 int index = response.find("playAddr:"); if (index != string::npos) { index += 10; int endIndex = response.find(",", index) - 1; string videoAddr = response.substr(index, endIndex - index); cout << "无水印视频:" << videoAddr << endl; } else { cerr << "解析响应结果失败" << endl; } // 释放CURL资源 curl_easy_cleanup(curl); } return 0; } ``` 需要注意的是,的API可能会随时变更,代码中的解析方式可能会失效。此外,由于涉及到版权问题,下载他人上传的视频可能会违反法律法规,请谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值