当前位置:首页 > 技术教程 > 正文内容

[Python] 西瓜视频下载(支持单个视频以及合集)

万福Blog2年前 (2022-05-14)技术教程12180

1、配置python环境,安装相应的库
2、安装ffmpeg,用于音频和视频合并(因为西瓜视频的音频和视频是分开的,需要各自下载,然后合并)
3、如有疑问,可以随意留言,一起讨论


import base64
import json
import os.path
import re
import subprocess
 
import requests
 
headers = {
    "cookie": "ixigua-a-s=0; __ac_nonce=062711eef0074c53fd301; "
              "__ac_signature=_02B4Z6wo00f01ixJMjwAAIDDB8Np-ahvLqYsaTaAAOlxwFWsX1Khk-KvFlM1N2JBoEUa-eVrLxEyF"
              ".bLdz61qjeQ-CTdvApqa7NKn7HTvbu1Nktww-QaXyO3gNQSkIdrfp3XdUkGrdCwrQKpea; "
              "MONITOR_WEB_ID=6364cae8-2aa7-4531-9a30-1b98b0ee7596; "
              "ttwid=1%7CTOw3V-1qPgQfcCT4S0Hhey26Q4PJq9J6nGaLq6GMe14%7C1651580656"
              "%7C48653bc0c5afd31f1a919f9bd17a80173a1ea69d96b23359b103c4f078ef969b; support_webp=true; "
              "support_avif=true; _tea_utm_cache_1300=undefined",
    "Referer": "https://www.ixigua.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/86.0.4240.75 Safari/537.36"
}
 
 
def downloadFile(url, name):
    print(f'开始下载: {name}')
    resp = requests.get(url, headers=headers)
    if not os.path.exists('movie'):
        os.mkdir('movie')
    with open(f'movie/{name}', mode='wb') as f:
        f.write(resp.content)
    print(f'完成下载: {name}')
 
 
def downloadAll(video_url, audio_url, title):
    if not os.path.exists('movie'):
        os.mkdir('movie')
    if not os.path.exists(f'movie/{title}-merger.mp4'):
        downloadFile(video_url, title + '.mp4')
        downloadFile(audio_url, title + '.mp3')
        # 使用ffmpeg进行音频视频合并 替换自己电脑ffmpeg的安装地址
        # D:/JetBrains/ffmpeg-5.0.1/ffmpeg-5.0.1-essentials_build/bin/ffmpeg
        command = f'D:/JetBrains/ffmpeg-5.0.1/ffmpeg-5.0.1-essentials_build/bin/ffmpeg -i movie/{title}.mp4 -i movie/{title}.mp3 -c:v copy -c:a aac -strict experimental movie/{title}-merger.mp4'
        print('开始合并音频视频......')
        subprocess.run(command, shell=True)
        os.remove(f'movie/{title}.mp4')
        os.remove(f'movie/{title}.mp3')
        print(f'完成合并,见目录: movie/{title}-merger.mp4')
 
 
def main(url):
    resp = requests.get(url=url, headers=headers)
    resp.encoding = 'utf-8'
    if resp.status_code == 200:
        res_html = resp.text
        if 'pseries_more_v2' not in url:
            json_str = re.findall('window._SSR_HYDRATED_DATA=(.*?)</script>', res_html)[0]
            json_str = json_str.replace('undefined', 'null')
            json_data = json.loads(json_str)
            video_url = \
                json_data['anyVideo']['gidInformation']['packerData']['video']['videoResource']['dash'][
                    'dynamic_video'][
                    'dynamic_video_list'][-1]['main_url']
            audio_url = \
                json_data['anyVideo']['gidInformation']['packerData']['video']['videoResource']['dash'][
                    'dynamic_video'][
                    'dynamic_audio_list'][-1]['main_url']
            title = json_data['anyVideo']['gidInformation']['packerData']['video']['title']
            title = re.sub(r"[\/\\\:\*\?\"\<\>\|]", "_", title).replace(" ", "")
            video_url = base64.b64decode(video_url).decode()
            audio_url = base64.b64decode(audio_url).decode()
            downloadAll(video_url, audio_url, title)
        else:
            json_data = json.loads(res_html)
            for item in json_data['data']:
                title = item['title']
                # backup_url_1
                video_url = item['preloadVideoResource']['dynamic_video']['dynamic_video_list'][-1][
                    'backup_url_1']
                audio_url = item['preloadVideoResource']['dynamic_video']['dynamic_audio_list'][-1][
                    'backup_url_1']
                video_url = base64.b64decode(video_url).decode()
                audio_url = base64.b64decode(audio_url).decode()
                title = re.sub(r"[\/\\\:\*\?\"\<\>\|]", "_", title).replace(" ", "")
                downloadAll(video_url, audio_url, title)
 
 
if __name__ == '__main__':
    # 单个视频 https://www.ixigua.com/6895255008762135051
    # 视频合集 https://www.ixigua.com/api/videov2/pseries_more_v2?pSeriesId=7069375938756411911&rank=0&tailCount=30
    # 关于下载视频合集的几个参数 rank:每页的起始数字  tailCount: 一页展示多少个
    # 比如第一页: rank=0&tailCount=30 第二页: rank=30&tailCount=30 第三页: rank=60&tailCount=30
    # 直接复制地址栏中长数字(类似:6895255008762135051)替换到链接中即可
 
    # 单个视频下载
    # 原链接:https://www.ixigua.com/6989911204554605064
    main('https://www.ixigua.com/6989911204554605064')
 
    # 合集视频下载
    # 原链接: https://www.ixigua.com/6888602680952881676?id=6887944298654859780
    # 将6888602680952881676 替换到下面链接中
    main('https://www.ixigua.com/api/videov2/pseries_more_v2?pSeriesId=6888602680952881676&rank=0&tailCount=30')


 您阅读本篇文章共花了: 

扫描二维码推送至手机访问。

版权声明:本文由万福博客网发布,如需转载请注明出处。

本文链接:http://blog.08qq.cn/post/48.html

分享给朋友:

相关文章

2022年zblog博客好看的底部代码分享

2022年zblog博客好看的底部代码分享

其实这个代码是我刚刚需要,但可以根据自己的使用情况来使用,我觉得很不错,配色方面可以根据自己网站的风格进行修改,CSS已设置为本地,可以跳转网站调整,主要美好效果不错,这里做个分享和备用。代码我会贴出来,为了避免后期代码转义,我会单独发一份...

PS通道抠像案例视频课程

PS通道抠像案例视频课程

课程介绍:教程—共有6集,分别讲解了素材的挑选、人物发丝的抠像方法、半透明图像的抠像方法以及两集超级酷炫吊炸天、冷艳高贵接地气的图像抠像教程,学完之后,你也可以像大神一样掌握头发丝级别的抠像处理。资源下载:    &nb...

Z-BlogPHP侧栏热门文章和热评文章不显示文章怎么解决

Z-BlogPHP侧栏热门文章和热评文章不显示文章怎么解决

其实每隔一段时间就会有人来问博主为什么侧栏的热门文章不显示文章呢?空白的一片片,与其每次重复解决倒不如写一篇文章解决下侧栏不显示热门文章的问题。这个问题首先可以排除时间问题,先要确定您所调用的时间是否正确,这个主题设置中都有,可以设置热门或...

新手无脑JMP搞定”福昕PDF转Word“会员问题

新手无脑JMP搞定”福昕PDF转Word“会员问题

简介:福昕PDF转Word,是福昕PDF软件自带的一个软件,可转换各种文档。1、打开软件,转换文档,提示“抱歉,您还未。。。”2、打开x32dbg附加程序,准备搜索字符串3、在字符串里查找“抱歉”,出来一些结果4、找到所需要的字符串,鼠标左...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。