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 運行結果如下
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章