一、网站分析

umn网站的爬虫难度还算简单,但是又比豆瓣、当当网之类的会难一些,非常适合初学者练手,而且网站的robots.txt协议允许一切的爬虫,可以说非常友好,没有法律风险,所以今天我就带大家来爬取一下umn的视频。

打开课程详情页,我们的目标是爬取所有的教学视频。

在详情页抓包,可以得到前三个视频的链接后缀。

第一个视频:1581601804.0237.24958.6125399.mp4
第二个视频:1581605929.0875.63457.6129383.mp4
第三个视频:1581605996.445.72069.6126469.mp4

那这个后缀怎么得到呢,首页的源代码里面是没有的,只能抓包看看,果然发现一个很萌的东西,因为开发者为了让首页加载出封面的图片,而这个图片又是直接从视频截取的,然后顺理成章的,网站开发者为了图方便省事,直接就用了和视频一样的url,只是后缀换成了jpg而已。(我猜测网站是外包给别人做的,一般金主只要能打开网站,发现功能繁复,界面设计精美,反手就是一个五星好评,根本不会注意到这种细节的问题)。

既然这样就很简单了,渲染出整个页面的数据,然后取出视频的后缀,拼接一下就ok了,废话不多说,上代码。

二、代码开源

#2.0版本公告:网站反爬机制被破解,只要输入课程的url,就可以爬取任意的教学视频
#1.2版本公告:加入了文本进度条显示
#1.1版本公告:新增自动创建文件夹功能,文件检索功能,文件已存在时不会重复下载
#umn一键视频爬取器1.0版本介绍:用于爬取umn教学平台上的的教学视频
import time
import pyautogui
import re
import requests
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def video_url_get(url_course):
#----获取视频的url----#
    video_list=[]
    #----设置浏览器静默模式----#
    chrome_options=Options()
    chrome_options.add_argument('--headless')
    diver=webdriver.Chrome()
    #----访问到首页----#  
    diver.get(url_course)
    time.sleep(4)
    #----鼠标往下滑两次----#
    for i in range(2):
        pyautogui.scroll(-10000)
        time.sleep(2)
    #----获取整个页面的数据,提取出视频后缀----#
    Pagesource=diver.page_source
    video_tails=re.compile('(\d*\.\d*\.\d*.{0,10}).mp4',re.S).findall(Pagesource)
    diver.close()
    for video_tail in video_tails:
        video_url='https://statics0.umustatic.cn/videoweike/teacher/weike/4kXW2806/transcoding/'+video_tail+'.mp4'
        video_list.append(video_url)
    return video_list

def downloader(url):
#----下载器----#
    start=time.time()
    size=0 #定义已下载文件的大小(byte)
    chunk_size=1024 #定义每次下载的数据大小(byte)
    root='d://umn_spider_video//'
    path=root+url.split('/')[-1]
    try:
        if not os.path.exists(root):
            os.mkdir(root)
        if not os.path.exists(path):
            res=requests.get(url,stream=True)
            content_size=int(res.headers['content-length'])
            if res.status_code==200:
                print('[文件大小]:%0.2f MB'%(content_size/1024/1024)) #将byte换算成MB
                print("急速爬虫器正在疯狂爬取!!!".center(50,'-'))            
                with open(path,'wb') as f:
                    for data in res.iter_content(chunk_size=chunk_size):
                        f.write(data)
                        size+=len(data)
                        print("\r[下载进度]:{}{:.2f}%".format('>'*int(size*50/content_size),size*100/content_size),end='')
                    print('\n下载成功,文件自动帮您保存在d:/umn_spider_video/')
        else:
            print('文件已存在')
    except:
        print('爬取失败')
if __name__=='__main__':
    url_course='这个地方填写想要爬取的课程首页的url'
    video_list=video_url_get(url_course)
    for url in video_list:
        downloader(url)
    input('任务全部完成,欢迎您的再次使用,按任意键退出。')

三、作者小tip

有了这个程序模板,只要把url_course换成你自己的课程url,就可以爬取到全部的视频,按理说应该可以爬取任意的课程视频了,我又用这个程序取爬取了另外一门课程的视频,实测是没问题的。

我主要是用这个网站来练习爬虫技术,爬取的视频也只是我自己看看,本来也是我自己班级的课程,爬取下来看和在线观看其实消耗网站的资源是一样的,没有侵犯隐私也没有恶意消耗网站资源。但是读者如果爬了视频拿出去盈利,转载,侵权,传播,别说是在我的模板的基础上弄的,是你自学成才的,造成后果自己承担,我并不建议这么去做。

四、如何打包程序

刚才有同学找我要此爬虫程序,但是如果没有python环境和相应的第三库是运行不了了,怎么让普通用户也能使用呢,在这里顺便给大家说一下。

1、按win+R打开运行(只针对windows环境)

2、输入cmd打开命令行

3、输入 Pyinstaller -F 你要打包的程序的绝对路径

注意中间有空格,-F就是只生产单个文件,然后还有别的指令,自己查文档吧。

软件打包的过程就是这么简单,分享给大家。

五、免安装绿色版

百度网盘:https://pan.baidu.com/s/1qx0DmAYJAUkU_M0wslguxQ

提取码:h0ds

如果好用的话请写个评论支持一下博主吧,有问题也请反馈,不用注册的。


小利利很快乐