基于lux的YouTube视频解析,下载

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路基于lux的YouTube视频解析,下载,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

必须能连外网环境下操作,挂梯子网络不稳定,容易解析失败
Pyton ,lux ,Motrix 百度下,都能找到官网下载即可

  1. 使用lux解析视频链接(会解析出很多不同分辨率的视频链接,使用下边的脚本过滤出能下载同时包含音视频的最大分辨率链接)
# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author  : v_jiaohaicheng@baidu.com
@des     :

"""
import re
import json
import subprocess
from cup.util import ThreadPool



def deal_stdout(stdout_list):
    """

    :return:
    """
    # print("stdout_list",stdout_list)
    stdout_str = ""
    for line in stdout_list:
        line = line.decode(encoding="utf-8", errors="ignore")
        if line.startswith("libpng warning"):
            continue
        stdout_str += line
    try:
        tmp_dic = json.loads(stdout_str)
        status_code = tmp_dic["status_code"]
        html_body = tmp_dic["html_body"]
    except BaseException:
        html_body = stdout_str
        status_code = stdout_str.split('"status_code" :')[-1].split("}")[0].strip()
    return status_code, html_body


def _stream_watcher(stream):
    output = []
    while True:
        line = stream.readline()
        if line:
            output.append(line)
        else:
            break
    if not stream.closed:
        stream.close()
        return output


def get_html(url):
    cmd = 'lux --json "{}"'.format(url)
    # print("cmd = ",cmd)
    phandle = subprocess.Popen(
        cmd,
        shell=True,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
    )
    stream = phandle.stdout
    status_code, html_body = deal_stdout(_stream_watcher(stream))
    # print("status_code = ", status_code)
    return html_body


def yield_url():
    with open("./url.txt","r",encoding="utf-8")as fp:
        for i in fp:
            yield i.strip()

def main(url):
    with open("./res_url3.txt", "a", encoding="utf-8")as fpout:
        data = get_html(url)
        data_json = json.loads(data)
        # print(json.dumps(data_json).replace("'",'"'))
        title = data_json[0]["title"]
        print(title)
        out_list = []
        for id, value in data_json[0]["streams"].items():
            try:
                quality = int(re.findall("\d+p video/mp4", value["quality"])[0].replace("p video/mp4", ""))

                for args in value["parts"]:
                    url = args["url"]
                    size = args["size"]
                    type = args["ext"]
                    if size == 0 and type == "mp4":
                        if len(out_list) > 0:
                            if quality > out_list[0]:
                                out_lis = [quality, url]
                        else:
                            out_lis = [quality, url]
            except:
                pass
        out_lis = [str(i) for i in out_lis]
        print(out_lis[0])
        fpout.write("{}\n".format(out_lis[1]))
        fpout.flush()




if __name__ == '__main__':
    # for url in yield_url():
    #     main(url)
    #     break

    t = ThreadPool(maxthreads=10,daemon_threads=False)
    t.start()
    for url in yield_url():
        # print(url)
        t.add_1job(main,
            url
        )
    t.stop()



  1. 使用Motrix软件下载上边解析出来的链接即可获得视频(链接有时效性)或者自己写下载脚本(需要多次尝试,并且需要支持断点续传)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156858.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!