• python下载pps视频



    思路

    • 视频播放地址提取

      直接解析一下原网页的源文件,利用正则就可以得到所有视频的播放地址,下面的代码以微信公共平台python教程的播放地址为例。

    • 视频链接提取

      这里利用了飞驴视频下载API进行视频链接提取,按照API的格式填写相关参数就ok了

    • 视频下载并保存

      使用urllib.urlretrieve函数保存视频就可以了


    源代码

    源代码贴出来,大家相互学习一下。代码比较简单,是按照上面的思路一步步做的,这里就不详细解释了


    
    #!/usr/bin/env python  
    # -*- coding: utf-8 -*-  
    
    import urllib
    import re
    import base64
    import os
    
    #下载微信-python教学视频主函数
    def down_weixin_python(url):
        #获取一个页面下的所有视频播放链接
        html = urllib.urlopen(url).read().decode('gbk').encode('utf-8')
        pattern = re.compile(r'><ashref="(.*?)"stitle="(.*?)"')
        down_link = pattern.findall(html)
    
        print ("本页面共有" + str(len(down_link)) + "个视频" )
    
        i = 1
        for each_link in down_link:
            #获取每个视频的下载地址
            api_prefix = each_link[0].replace('//','##')
            api_prefix = base64.b64encode(api_prefix)
            api_head = 'http://api.flvxz.com/url/' + api_prefix + '/ftype/flv'
    
            #解析出视频的真实下载地址
            page = urllib.urlopen(api_head).read()
            link_pattern = re.compile(r'<file><furl><![CDATA[(.*?)]]></furl><ftype>flv</ftype>')
            video_link = link_pattern.findall(page)
    
            print ("正在下载第" + str(i) + "个视频...")
            down_video(video_link, each_link[1])
            i = i + 1
    
    #显示下载进度
    def Schedule(a, b, c):
        '''
        a:已经下载的数据块
        b:数据块的大小
        c:远程文件的大小
        '''
        per = 100.0 * a * b / c
        if per > 100:
            per = 100
        print '%.2f%%' % per
    
    #下载文件
    def down_video(video_url, file_name):
        path = unicode(file_name, 'utf-8')
    
        if os.path.exists(path):
            pass
        else:
            os.mkdir(path)
    
        file_name = unicode(file_name, 'utf-8')
    
        if len(video_url) > 1:
            j = 0
            for each_link in video_url:
                save_name = path + '\' + file_name + '-' + str(j) + '.f4v'
                if os.path.isfile(save_name):
                    pass
                else:
                    urllib.urlretrieve(each_link, save_name, Schedule)
                j = j + 1
        else:
            save_name = path + '\' + file_name + '.f4v'
            if os.path.isfile(save_name):
                pass
            else:
                urllib.urlretrieve(video_url[0], save_name, Schedule)
    
    
    url = ['http://v.pps.tv/11786793?page=1', 'http://v.pps.tv/11786793?page=2']
    
    for each_link in url:
        down_weixin_python(each_link)      
    

    个人原创,转载请注明出处!

  • 相关阅读:
    在画图时添加中文
    legend图例
    数组的拼接
    将多维数组改为一维数组
    ChinaCock扫描控件介绍-使用TCCBarcodeScanner引起app闪退
    ChinaCock打印控件介绍-TCCFujitsuPrinter实现蓝牙针式打印
    用NetHttpClient执行Post操作遇到的问题
    【转】FireMonkey ListView 自动计算行高
    基于MQTT的串口数据转发器
    kbmMW均衡负载与容灾(1)
  • 原文地址:https://www.cnblogs.com/Jack-Lee/p/3735345.html
Copyright © 2020-2023  润新知