怎么下载头条视频,几行代码搞定

一、使用想转就转短视频无水印解析下载助手

电脑端软件下载

软件主界面

1.1、下载方法:

点击软件左侧「短视频解析」菜单下的「头条」子菜单,可以通过今日头条视频的分享链接解析下载无水印的视频,支持单个视频下载和批量下载。可设置「分享链接」、「分享链接文件」、「输出路径」等参数。

头条菜单页面

在「头条」页面,

如果想解析下载一条短视频,则在「分享链接」文本输入框中,填写一条在今日头条视频的分享图标复制的链接,然后点击「添加到表格」按钮,将分享链接的信息添加到软件表格内。比如,下面的一条分享链接:

分享链接类似于: https://www.xxxxxx.com/video/xxxxxxxxxxxxxxxxxxxx/

添加到软件表格内后,如下图:

添加分享链接到表格

如果想解析下载多条短视频,请将不超过20条的分享链接,一条一行粘贴到一个文本文件中,然后在本软件的「分享链接文件」旁边,点击“添加文件”按钮,将刚才保存分享链接的文本文件添加进来,分享链接的信息会添加到软件表格内。比如,下面的文本文件有2条分享链接:

保存头条分享链接的文件

添加到软件表格内后,如下图:

添加多条分享链接到表格

「输出路径」处点击「另存为」按钮,选择解析后下载视频文件的保存路径,或者默认路径为桌面“aizhuanhuan”文件夹;

点击「开始解析」按钮,开始解析软件表格内的分享链接,当表格中对应分享链接的「处理状态」字段的值从“待处理”,变为“处理完成”,表示解析下载完毕,此时,可以在「输出路径」中找到已经下载好的文件。

点击「清空表格」按钮将清空表格内所有分享链接信息。

二、核心代码

def start_analyse(self):
    # 如果表格中有文件或文件夹,且是待处理状态,则对待处理文件或文件夹进行处理
    if self.tableWidget_2.rowCount() > 0:

            # 遍历表格中所有行
            for row_index in range(self.tableWidget_2.rowCount()):
                # 判断row_index行是否为待处理文件:
                # 如果是待处理,则从表格拥有分享链接信息字典self.url_dict_in_table 中获取该行文件的全路径
                if self.tableWidget_2.item(row_index, 2).text() == "待处理":
                    # row_index行‘处理状态’字段值设置由“待处理”修改为“处理中...”
                    self.set_handle_status_item(row_index, "处理中...")

                    # 获取该行“分享链接URL”
                    https_url = self.tableWidget_2.item(row_index, 0).text()

                    # 输出文件夹路
                    out_folder = self.out_dir_lineEdit.text()

                    # 输出文件夹路径不存在则创建
                    if not os.path.isdir(out_folder):
                        os.makedirs(out_folder)

                    # 短视频解析:
                    # 标题头headers
                    headers = {
                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                        # 一般User-Agent字段包括以下几个信息:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息;
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
                        # cookie 必须要,但是不用登录的cookie..先进入头条的页面,按f12查看cookie就可以了,全部复制也可以,只复制ttwid也可以
                        "Cookie": "ttwid=1%7CarG_9zGHRnvha3xXVrDKUesY-60w8j0Wn7FI6t6ZvFM%7C1687310450%7Cd2ec6a6525f124a59045e2e1314be8c6cdddaae26f8ae8cf06696d235fe1721b; "
                    }

                    # 从分享链接'https://www.toutiao.com/video/7313169821129474587/'获取视频资源地址
                    res = requests.get(https_url, headers=headers, timeout=10)
                    html_content = res.text
                    # print(html_content)
                    # 将 HTML 内容解析为 BeautifulSoup 对象

                    soup = BeautifulSoup(html_content, 'html.parser')
                    # print(soup)
                    # 查找包含 "id="RENDER_DATA"" 的 script 标签
                    tag = soup.find('script', id='RENDER_DATA')

                    # 提取 JSON 字符串
                    json_data = tag.string
                    # print('json_data数据:',json_data)
                    json_data2 = urllib.parse.unquote(json_data)
                    # print('json_data2数据:',json_data2)

                    # 将 JSON 字符串解析为 Python 对象
                    data = json.loads(json_data2)
                    # pprint.pprint(data)  # 格式化输出


                    # 视频的格式不一样,json格式也不一样.例如有video_list和dynamic_video
                    title = data['data']['initialVideo']['title']   # 标题

                    videoPlayInfo = data['data']['initialVideo']['videoPlayInfo']  # 该下面的属性不一样,需要判断
                    last_video_list = None
                    if videoPlayInfo.get("video_list"):
                        last_video_list = videoPlayInfo['video_list'][-1]  # 取最后一个,是最清晰的视频链接
                    elif videoPlayInfo.get('dynamic_video'):
                        last_video_list = videoPlayInfo['dynamic_video']['dynamic_video_list'][-1]  # 取最后一个,是最清晰的视频链接

                    backup_url = last_video_list['backup_url']  # 最终的视频链接
                    print('视频资源地址:', backup_url)

                    # 将video_id对于视频资源下载到输出文件夹out_folder
                    result_state = self.save_video_from_video_url(headers, title, backup_url, out_folder)

                    # 如果result_state为真,则表明“处理完成”
                    if result_state:
                        # 表格中“处理状态”字段单元格值设置由“处理中...”修改为“处理完成!”
                        self.set_handle_status_item(row_index, "处理完成!")

                    else:
                        # 表格中“处理状态”字段单元格值设置由“处理中...”修改为“出错啦!”
                        self.set_handle_status_item(row_index, "出错啦!")

    # 如果表格中没有分享链接信息,则弹出警告
    else:
        # 弹出警告消息框提示
        QMessageBox.warning(self, "警告", "请添加分享链接!")
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值