Python抖音无水印视频下载方法

 更新时间:2021年12月22日 10:57:16   作者:yz_weixiao  
这篇文章主要介绍了用Python下载抖音无水印视频的方法,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

分享学习Python爬虫、数据分析、数据挖掘的点滴。

最近发现了抖音无水印视频的下载方法。

# 抖音接口

「url」参数值就是从抖音上复制的链接。

Python下载

首先来看一下,直接访问抖音链接得到的结果。

妥妥的水印...

接下来打开浏览器的开发者工具,看看视频的地址。

可以发现「playAddr」就是视频的地址,复制然后访问。

链接会重定向到以「v9」开头的链接,然而还是有水印。

接下来就是重点了,首先你需要让你的浏览器能够修改UA,即爬虫经常用到的「User-Agent」。

我用的是Mac+谷歌浏览器,就说说我自己怎么修改的。

Windows的请自行百度~

首先在电脑的文稿中创建一个文件夹。

这个文件夹的路径如下。

/Users/star-river/Documents/MyChrome

并且在根目录的终端运行下面这段代码。

open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/star-river/Documents/MyChrome

如此我的谷歌浏览器就能成功更换UA啦!

还是直接访问抖音的链接,可以看到结果和最初的不一样。

就在这个模式下查找接口。

发现「?item_ids」开头的这个接口就包含了我们想要的无水印抖音视频。

就是「play_addr」下的列表中的那两个链接。

其中「?item_ids」开头的这个接口有两个参数需要我们在另一个接口中获取。

这样「item_ids」和「dytk」参数值我们也知道了。

不过我们直接用浏览器访问获取到的那两个链接是不会直接出现视频的,需要和上面的一样。

也改变一下UA,这里的链接如果还用「iPhone X」这个UA访问,会失败。

什么原因,小F就不得而知了...

把浏览器UA改为「Responsive」即可访问,链接会重定向。

这样无水印的抖音视频就搞定了。

不过要是每个视频都需要这么下载,就太麻烦了。

所以写了用Python就可以下载视频的代码。

import requests
import json
import re

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/ajpg,*/*;q=0.8',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'cache-control': 'max-age=0',
    # 这个貌似很重要
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36',
}


def download(url):
    """
    下载抖音无水印视频
    """
    # 获取接口参数
    html = requests.get(url=url, headers=headers)
    title = re.findall('itemId: "(.*?)",', html.text)[0]
    dytk = re.findall('dytk: "(.*?)" }', html.text)[0]

    # 拼接接口
    url_item = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' + title + '&dytk=' + dytk

    # 获取抖音无水印视频链接
    html_item = requests.get(url=url_item, headers=headers)
    # 字符串转字典
    content = json.loads(html_item.text)

    # 视频接口
    url_video = content['item_list'][0]['video']['play_addr']['url_list'][1]
    response = requests.get(url_video, headers=headers, allow_redirects=True)

    # 获取重定向后的链接,这个也是无水印视频的下载链接,不过本次没用
    redirect = response.url
    print(redirect)

    # 视频是二进制,需要这种下载办法
    video = requests.get(url_video, headers=headers).content
    video_name = "douyin.mp4"
    with open(video_name, 'wb') as f:
        f.write(video)
        f.flush()
    print("下载完成")

if __name__ == '__main__':
    # 抖音链接
    url = 'https://v.douyin.com/XJj85H/'
    download(url)

无水印视频完美下载。

接口下载

既然知道了如何用Python下载视频。

那么小F想让大家下载的更方便一点,所以将程序部署到了服务器上。

你只需要通过小F的接口即可下载视频,代码如下。

from flask import Flask, request, send_file
import requests
import json
import re

app = Flask(__name__)


# 只接受get方法访问
@app.route("/douyin/", methods=["GET"])
def check():
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/ajpg,*/*;q=0.8',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'cache-control': 'max-age=0',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36',
    }
    # 默认返回内容
    return_dict = {'code': 1, 'result': False, 'msg': '请求成功'}
    # 判断入参是否为空
    if request.args is None:
        return_dict['return_code'] = '504'
        return_dict['return_info'] = '请求参数为空'
        return json.dumps(return_dict, ensure_ascii=False)
    # 获取传入的参数
    get_data = request.args.to_dict()
    url = get_data.get('url')

    # 获取接口参数
    html = requests.get(url=url, headers=headers)
    title = re.findall('itemId: "(.*?)",', html.text)[0]
    dytk = re.findall('dytk: "(.*?)" }', html.text)[0]

    # 拼接接口
    url_item = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' + title + '&dytk=' + dytk

    # 获取抖音无水印视频链接
    html_item = requests.get(url=url_item, headers=headers)
    # 字符串转字典
    content = json.loads(html_item.text)

    # 获取视频相关的信息
    # data = {}
    # 视频的描述
    # data['videoDesc'] = content['item_list'][0]['desc']
    # 视频的封面图,小图
    # data['dynamiCoverUrl'] = content['item_list'][0]['video']['dynamic_cover']['url_list'][0]
    # 视频的封面图,大图
    # data['staticCoverUrl'] = content['item_list'][0]['video']['origin_cover']['url_list'][0]
    # 视频的评论数
    # data['comments'] = content['item_list'][0]['statistics']['comment_count']
    # 视频的点赞数
    # data['prise'] = content['item_list'][0]['statistics']['digg_count']

    # 视频接口
    url_video = content['item_list'][0]['video']['play_addr']['url_list'][1]
    response = requests.get(url_video, headers=headers, allow_redirects=True)

    # 获取重定向后的链接,这个也是无水印视频的下载链接,不过本次没用
    redirect = response.url
    # print(redirect)
    # 视频的下载链接
    # data['videoPlayAddr'] = redirect
    # 返回视频的信息
    # return_dict['result'] = data
    # 返回结果
    # return json.dumps(return_dict, ensure_ascii=False)

    video = requests.get(url=redirect, headers=headers).content
    video_name = "douyin.mp4"
    with open(video_name, 'wb') as f:
        f.write(video)
        f.flush()
    return send_file('douyin.mp4')
if __name__ == "__main__":
    # 本地调试
    app.run(debug=True)
    # 部署上线
    # app.run(host='127.0.0.1', port=443)

如果本地安装了Flask以及Requests库,这个程序是可以直接运行。

并且能够下载到你所想要的无水印抖音视频。

# 本地接口

http://127.0.0.1:500/douyin/?url=https://v.douyin.com/CoQBx1/

部署到服务器上的话,则需要使用443端口。

到此这篇关于用Python下载抖音无水印视频的文章就介绍到这了,更多相关Python下载抖音无水印视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对Python获取屏幕截图的4种方法详解

    对Python获取屏幕截图的4种方法详解

    今天小编就为大家分享一篇对Python获取屏幕截图的4种方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python调用.NET库的方法步骤

    Python调用.NET库的方法步骤

    这篇文章主要介绍了Python调用.NET库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python 实现图像特效中的油画效果

    Python 实现图像特效中的油画效果

    这篇文章主要是为大家简单介绍一下图像添加油画特效的基本原理以及代码实现,文中的示例代码很详细,对我们学习或者工作有一点的价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • Python实现霍夫圆和椭圆变换代码详解

    Python实现霍夫圆和椭圆变换代码详解

    这篇文章主要介绍了Python实现霍夫圆和椭圆变换代码详解,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python的输入,输出和标识符详解

    Python的输入,输出和标识符详解

    这篇文章主要介绍了介绍了Python的输入,输出和标识符,有需要的朋友们可以参考一下,希望能给您带来帮助
    2022-01-01
  • python GUI模拟实现计算器

    python GUI模拟实现计算器

    这篇文章主要为大家详细介绍了python GUI模拟实现计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • PyCharm代码回滚,恢复历史版本的解决方法

    PyCharm代码回滚,恢复历史版本的解决方法

    今天小编就为大家分享一篇PyCharm代码回滚,恢复历史版本的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python 类属性与实例属性,类对象与实例对象用法分析

    Python 类属性与实例属性,类对象与实例对象用法分析

    这篇文章主要介绍了Python 类属性与实例属性,类对象与实例对象用法,结合实例形式分析了java类相关的属性、实例化、对象等相关概念与操作技巧,需要的朋友可以参考下
    2019-09-09
  • ROS1 rosbag的详细使用并且使用python合并bag包的方法

    ROS1 rosbag的详细使用并且使用python合并bag包的方法

    这篇文章主要介绍了ROS1 rosbag的详细使用,并且使用python来合并bag包,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Django框架设置cookies与获取cookies操作详解

    Django框架设置cookies与获取cookies操作详解

    这篇文章主要介绍了Django框架设置cookies与获取cookies操作,结合实例形式详细分析了Django框架针对cookie操作的各种常见技巧与操作注意事项,需要的朋友可以参考下
    2019-05-05

最新评论