Python3.x 如何在线下载视频

Python3.x如何在线下载视频

说明:
1.本文中使用的视频解析器为“诺讯智能解析系统 https://www.nxflv.com”
2.前提:掌握python基本语法
3.实现方式多种多样,仅供参考

下载流程

1.获取目标资源地址
2.解析资源路径,获取解析后得到的信息
3.下载视频

如何解析资源,得到解析后的资源信息

①访问“诺讯智能解析系统https://www.nxflv.com/?type=demo”,输入在解析地址栏中输入目标url。
②使用F12打开调试面板(谷歌浏览器),点击搜索,选择Network Tab,过滤XHR选项,可以看到api.php,这就是加载解析后的视频API接口,分析一下请求头,可以从头中获取到请求地址和返回的信息。详细过程不做阐述,如图所示。
在这里插入图片描述
在这里插入图片描述

根据解析信息获取下载资源地址

从以上步骤获取到请求信息后,转换成python脚本代替手工访问获取视频下载地址。

  """
        获取视频加载地址
    """
    def get_url(self,target):
        print("加载请求地址...")
        # 封装请求头参数
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
        }
        # 封装请求参数
        param = {
            "url": target,
            "other":str(base64.b64encode(quote(target, 'utf-8').encode("utf-8")), "utf-8"),
            "ref":0,
            "time":int(time.time())
        }
        # 调用API获取视频解析信息
        response = requests.post(url=self.server,headers=headers,data=param,verify=False)
        response.encoding = 'utf-8'
        info = json.loads(response.text)
        if info["code"] == 200:
            tempUrl = base64.b64decode(info["url"])
            url = tempUrl[3:].decode()
            print("加载请求地址完成.")
            return url
        else:
            print("加载请求地址失败.")
            return "-1"

3.下载视频

此处使用的是request.urlretrieve(...)方法
 	"""
       函数说明:回调函数,打印下载进度
       Parameters:   a b c - 返回信息
       Returns: 无
    """
    def Schedule(self, a, b, c):
        per = 100.0 * a * b / c
        if per > 100:
            per = 1
        sys.stdout.write("\t%.2f%% 已经下载的大小:%.2f MB 文件大小:%.2f MB\r" %(per, a*b/1024/1024, c/1024/1024))
        sys.stdout.flush()
        
	"""
        下载视频
    """
    def download(self,url,filename):
        print("正在下载【%s】" % filename)
        request.urlretrieve(url=url, filename=filename, reporthook=self.Schedule)
        print('\n下载完成!')

4.整合代码

#!H:/worksoft/Python38/python.exe
# coding:utf-8
import sys,requests,json,time,base64
from urllib import request
from urllib.parse import quote

"""
使用诺讯智能解析系统爬取视频
Referer: https://www.nxflv.com/api.php
"""
class downloadvideo():
    def __init__(self):
        self.server = "https://www.nxflv.com/api.php"

    """
       函数说明:回调函数,打印下载进度
       Parameters:   a b c - 返回信息
       Returns: 无
    """
    def Schedule(self, a, b, c):
        per = 100.0 * a * b / c
        if per > 100:
            per = 1
        sys.stdout.write("\t%.2f%% 已经下载的大小:%.2f MB 文件大小:%.2f MB\r" %(per, a*b/1024/1024, c/1024/1024))
        sys.stdout.flush()

    """
        获取视频加载地址
    """
    def get_url(self,target):
        print("加载请求地址...")
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
        }

        param = {
            "url": target,
            "other":str(base64.b64encode(quote(target, 'utf-8').encode("utf-8")), "utf-8"),
            "ref":0,
            "time":int(time.time())
        }
        response = requests.post(url=self.server,headers=headers,data=param,verify=False)
        response.encoding = 'utf-8'
        info = json.loads(response.text)
        if info["code"] == 200:
            tempUrl = base64.b64decode(info["url"])
            url = tempUrl[3:].decode()
            print("加载请求地址完成.")
            return url
        else:
            print("加载请求地址失败.")
            return "-1"

    """
        下载视频
    """
    def download(self,url,filename):
        print("正在下载【%s】" % filename)
        request.urlretrieve(url=url, filename=filename, reporthook=self.Schedule)
        print('\n下载完成!')


if __name__ == '__main__':
    dlv = downloadvideo()
    video_url = '视频来源地址'
    filename = '文件名称+后缀'
    url = dlv.get_url(video_url)
    if url != "-1":
        dlv.download(url ,filename)

大工告成

使用cmd 运行结果如下
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值