时隔多年,重操旧业。

今年受疫情影响,学校上课采用了在线教学。当然没课的人是体会不到那种“乐趣”的。

偶然间学妹说某课的教学视频在B站上下架了,看不了视频。

我本着乐于助人的态度,想着这种时候怎么可以怠惰,一定得让学弟学妹上好课。

ryss

首先思量着怎么去找到这视频,在一番操作无果之后,最终还是屈服于国内第一搜索引擎

在多次筛选后找到了视频来源:超星慕课,视频可以在线观看,课程视频数量过百

接着又想着把视频捣鼓到自己的电脑上看。

说干就干。

最先考虑的是IDM自带的网站探索。然而探半天没探出个什么所以然。

想了想手上能拿得出手的相应的技能也就炙手可热风靡各行各业的python。

干了兄弟萌!OLG!
[OLG]

于是花了一个晚上和第二天的时间重温了一下这门手艺,成功爬下了视频。

代码

github:
https://github.com/euukey/cx-mooc-downloader

(代码编排还挺糟糕,但注释还挺仔细的。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from bs4 import BeautifulSoup          # 要自行安装的模块之一
import requests
import re
import random
from fake_useragent import UserAgent # 要自行安装的模块之一
import time
import os
import shutil

#链接课程网站
url = input("输入超星视频课程页面链接[如:http://mooc1.chaoxing.com/course/161102.html]:")


#伪装ua
fake_ua = UserAgent()
headers = {'User-Agent':fake_ua.random} # 随机生成ua
r = requests.get(url,headers = headers)
soup = BeautifulSoup(r.text, 'html.parser')


# 创建保存视频的文件夹
save_dir = 'D:/'+soup.title.text #保存路径
if os.path.exists(save_dir):
shutil.rmtree(save_dir) #清空文件夹
os.mkdir(save_dir)

# 课程链接列表
url_list = []

#搜索所有章节链接,并添加到列表中
for link in soup.find_all(href=re.compile("nodedetailcontroller")):
course = link.get('href')
url_list.append('http://mooc1.chaoxing.com'+course) #补全链接

#文件编号
num = 1

# 遍历所有链接下载
print("开始下载视频!默认下载到D盘。")
for v_url in url_list:
v_r = requests.get(v_url, headers=headers)
v_soup = BeautifulSoup(v_r.text, 'html.parser')
# 搜索视频id
for dict in v_soup.find_all('iframe'):
data = eval(dict.get('data'))
# 下载
print('downloading……')
req = requests.get('http://d0.ananas.chaoxing.com/download/' + data['objectid'], headers=headers)
with open(save_dir+'/'+str(num)+'.'+v_soup.find(id="nodeTitleEle").text + '.mp4', "wb") as f:# 标题:soup.find(id="nodeTitleEle").text
f.write(req.content)
print(v_soup.find(id="nodeTitleEle").text+'complete!')
time.sleep(5+random.randint(1,11)) # 随机添加访问间隔
num+=1
print("所有视频下载完成!")