【爬虫】 爬取云班课上老师发的视频资源 python

蒟蒻声明这个程序虽然可以差强人意地实现功能但是烂的一批,也不打算做出较大改动了。后面会总结一些不足之处,以警示以后。思路。1.通过抓包发现云班课的视频时m3u8的,即一个m3u8的文件中记录了数个ts类型视频的链接,这些ts视频的时常一般为10秒。想爬取某个视频只需要获取视频对应的m3u8文件,依次把m3u8文件中的ts文件下载并通过os.system()调用命令行把一系列的ts文件合并为mp42.步骤1是单独下载一个视频的思路,若想下载所有视频,只需要找出所有视频的m3u8,重复步骤1。单
摘要由CSDN通过智能技术生成

蒟蒻声明

这个程序虽然可以差强人意地实现功能但是烂的一批,也不打算做出较大改动了。后面会总结一些不足之处,以警示以后。

思路


1.
通过抓包发现云班课的视频时m3u8的,即一个m3u8的文件中记录了数个ts类型视频的链接,这些ts视频的时常一般为10秒。想爬取某个视频只需要获取视频对应的m3u8文件,依次把m3u8文件中的ts文件下载并通过os.system()调用命令行把一系列的ts文件合并为mp4
2.
步骤1是单独下载一个视频的思路,若想下载所有视频,只需要找出所有视频的m3u8,重复步骤1。

单独下载一个m3u8

笔者仅仅在要爬的课程中实验该程序可以达到目的,至于其他的m3u8就不清楚了
1.
获取m3u8文件后解析其内容,做到可以提取出所有的ts文件链接
2.
把所有的ts文件下载本地的同一个文件夹中
3.
调用命令行,例如这样:
os.system(‘copy /b ‘+os.path.abspath(tempworkpath)+’\.ts ‘+os.path.abspath(pathOUTPUT)+’\’+nameOUTPUT+’.mp4’)
合并所有ts文件为一个新的mp4文件
4.
把这一次下载的ts文件删掉,以备下一次操作
os.system('del ‘+os.path.abspath(tempworkpath)+’\
.ts’)

import re
import requests
from bs4 import BeautifulSoup
import os


def DownOne(url,name):
    toIdxStr = lambda x : ('000000000'+str(x))[-10:]

    urlM3U8 = url
    nameOUTPUT = name.replace(' ','')
    pathOUTPUT = 'out'
    sch = re.search('(.+?/[0-9].{3}/[0-9].{1}/[0-9].{1}/)(.+?).m3u8',urlM3U8)
    headM3U8 = sch.group(1)
    nameM3U8 =sch.group(2)
    tempworkpath = 'aaabbbcccdddeeefffggghhhiii'

    resM3U8 = requests.get(urlM3U8)

    lstTS = re.findall('.+?ts',resM3U8.text)

    if not os.path.exists(tempworkpath):
        os.mkdir(tempworkpath)
    if not os.path.exists(pathOUTPUT):
        os.mkdir(pathOUTPUT)

    for i,each in enumerate(lstTS):
        print(i,'of',len(lstTS))
        res = requests.get(headM3U8+each)
        with open(tempworkpath+'/'+nameM3U8+toIdxStr(i)+'.ts', 'wb') as f:
            f.write(res.content)

    print('合并')
    print('copy /b '+os.path.abspath(tempworkpath)+'\\*.ts '+os.path.abspath(pathOUTPUT)+'\\'+nameOUTPUT+'.mp4')
    os.system('copy /b '+os.path.abspath(tempworkpath)+'\\*.ts '+os.path.abspath(pathOUTPUT)+'\\'+nameOUTPUT
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值