一师一优课课堂实录下载与合并

视频演示:https://v.qq.com/x/page/s3074becqg7.html

本文可能是一师一课视频的下载和合并方法的首发。大体思路是先使用油猴插件,抓取到标题和视频列表地址,再在python中逐一下载列表中的视频片段并合并成一个文件,最后删除视频片段。具体流程如下:

1.添加油猴脚本

// ==UserScript==
// @name         1s1k
// @namespace    http://oyfdkz.com/
// @version      0.1
// @description  try to take over the world!
// @author       QQ 5432012
// @match        http://1s1k.eduyun.cn/*
// @grant        123456
// ==/UserScript==

(function() {

    //进入页面后每500毫秒重复执行
    var t1 = window.setInterval(hello,500);

    function hello(){

        //试图抓取视频播放器中列表地址
        var ls=player.getPlaylist();
        var fn=ls[0].file;

        if(fn.indexOf('.m3u8')!=-1){
            //抓到地址,退出循环,弹出标题和地址
            window.clearInterval(t1);
            var tt = document.getElementsByTagName('h1')[0].innerHTML;
            tt.replace(/[<>:"/|?*]+/g, '');
            alert(tt+'|'+fn);
        }
    }

})();

 

设置用户包括,在访问1s1k.eduyun.cn时触发脚本

2.抓取标题和视频地址

访问具体的一课页面后,油猴脚本生效,弹出标题和视频列表地址,将文本复制下来。

3.python中下载合并

import urllib.request
import requests
from requests.adapters import HTTPAdapter
import time
import re
import os


while True:
    #读取标题和地址
    geturl=input('输入地址:')
    url=geturl.split('|')[1]  

    #读取视频列表 
    website = urllib.request.urlopen(url,timeout = 1000)
    html = website.read()
    html=html.decode('utf-8','ignore')
    line=html.split('\n')
    #片段总数    
    tstr=line[len(line)-3].split('.')
    tstr=tstr[len(tstr)-2]
    tstr=int(tstr)+1
    
    #标题处理
    path_data=geturl.split('|')[0]
    rstr = r"[\/\\\:\*\?\"\<\>\|]"  # '/ \ : * ? " < > |'
    path_data = re.sub(rstr, "_", path_data)  # 替换为下划
        
    #临时目录清空    
    if os.path.exists(path_data):
        del_list = os.listdir(path_data)
        for i in del_list:
            file_data = path_data + "/" + i
            if os.path.isfile(file_data) == True:
                os.remove(file_data)
            else:
                del_file(file_data)
           
    os.mkdir(path_data)     
    
    #依次下载片段    
    for i in range(tstr):      
        s = requests.Session()
        s.mount('http://', HTTPAdapter(max_retries=12))                          
        try:
            fc=s.get(url+'.' +str(i)+ '.ts', timeout=(5,300))            
            print(str(i), end = ' ')
            with open(path_data+'/'+str(i)+'.ts','wb') as f:       
                f.write(fc.content)
                f.close
        except:
           print(str(i) +"超时放弃.............")

    #合并片段
    fname = open(path_data+'.mp4','wb')    
    print('')      
    for i in range(tstr):
        x=open(path_data+'/'+str(i)+'.ts','rb')
        fname.write(x.read())
        x.close     
    fname.close()
    x=open('tmp','r')
    x.close 
    
    #删除片段
    del_list = os.listdir(path_data)    
    for i in del_list:       
        file_data = path_data + "/" + i
        try:
            os.remove(file_data)
        except:
            print(file_data +' del err')
    try:
        os.rmdir(path_data)
    except:
        print('', end = '')    
        
    print(path_data+" is ok!")
    print('');
     

运行python脚本,粘贴刚才复制的地址

 

一师一课一节课的视频被压缩到200兆左右,画质损失严重。下载的方式要比录屏效率更高,损失更小。初学python,代码粗陋,仅供参考。

土豪用户直接下载代码:https://download.csdn.net/download/nokiae50/12202653

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值