zoukankan      html  css  js  c++  java
  • 无水印抖音视频批量下载---基于python爬虫(全网最简单方法含详细解析)

    原文链接:https://blog.csdn.net/Cool_breeze_bin/article/details/113356288?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-17.control&dist_request_id=1328602.30574.16150346664273767&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-17.control

    声明:此教程只用于学习,不可商用

    手机操作

    首先手机打开抖音,找到作者主页:
    我们以天王“刘德华”抖音为例。

    第一步,点击右上角“···”,如下点击分享:

    然后如下图所示,复制链接:

    电脑操作

    将我们在手机上复制的链接通过浏览器打开:

    我们向下划,发现并没有真正的页面内容

    这是因为抖音最新加入了网页隐藏功能,我们打开解析页也可发现相关内容只有大概框架,并无真实内容。

    对于这一问题,我们反复刷新网页即可(后面代码实现部分也有对应解决方案):

    通过刷新成功后的上图,我们可以知道这是正确的解析页。
    我们接下来对细分内容进行分析即可。
    首先展开“aweme_list”列表进行查看,我们很容易发现:
    一共有3行数据,也就是3条视频,而“desc”对应的参数就是抖音视频的题目。

    我们再打开其中一个标签进行深究,发现如下图所示:

    出现“video”标签,通过英文翻译也就是“视频”的意思,
    我们通过此标签继续深挖,其下一级标签如下图所示:

    我们又可以找到“play_addr_lowbr”的标签,进行展开后如下图所示:

    通过上图展开“url_list”标签,即视频的访问地址。
    我们只需其中的第一条链接即可,将其复制并使用浏览器打开,如下图:

    我们看到了无水印的视频,也就是我们需要的视频。
    网页分析结束,接下来上代码。

    代码部分

    需要的相关python库为:requests和json两个库

    import requests
    import json
    # 抖音视频的URL
    url="https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7ibxriLF-GSBF5QKa1Op9hxcMAPVmzmXwXqqvMfrhs&count=21&max_cursor=0&aid=1128&_signature=rrFSDQAAzq.dR1hiGSYhIa6xUh&dytk="
    
    headers = {
        'User-Agent':"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
    }
    #调用requests中的get获取抖音作者主页的网页链接
    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())
    #pd参数为布尔类型参数,data_json['aweme_list'] == []是为了判断'aweme_list'下一级内容是否为空,为空则为True
    pd = data_json['aweme_list'] == []
    #接下来使用循环来解决我们之前所提到的“隐藏内容”问题
    while pd == True:
    #只要“aweme_list”下一级内容为空,则反复访问作者主页链接,直到成功显示隐藏内容为止跳出循环
        r = requests.get(url=url, headers=headers,stream=True)
        data_json = json.loads(r.text)
        pd = data_json['aweme_list']== []
    #下一级内容不为空,则访问下一级标签    
    for i in range(len(data_json['aweme_list'])):   
        print(data_json['aweme_list'][i]['video']['play_addr_lowbr']['url_list'][0])

    上面所讲的url即解析页中“Headers”下的“requests url”(复制粘贴即可):

    “headers”内容即“Headers”下“Request Headers”中的“user-agent”:

    上面代码运行结果如下图所示:

    通过上图,我们发现已经成功得到该作者所有作品链接。
    接下来就是下载到自己的电脑:

    # 我们要保存视频文件的主要路径
    path = "/··/··/Desktop/"
    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为我们获取的视频标题
        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_1 = path+t+'.mp4'
        # 保存抖音视频mp4格式,二进制读取
        with open(path_1, "wb") as xh:
            # 先定义初始进度为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))

    运行代码:

    如上图所示,下载完毕后,我们便可在桌面找到爬取的无水印的抖音视频文件(我的path参数指向桌面,路径可自行修改)

  • 相关阅读:
    Linux -- nginx
    Linux--虚拟环境
    Linux用户权限指令, 定时任务等指令
    Linux的基础命令, django的安装与使用
    .net与Java的WebService互调
    C#中的动态特性
    LINQ之路(3):LINQ扩展
    LINQ之路(2):LINQ to SQL本质
    LINQ之路(1):LINQ基础
    LINQ之路系列文章导读
  • 原文地址:https://www.cnblogs.com/yszr/p/14493959.html
Copyright © 2011-2022 走看看