时隔多年,重操旧业。
今年受疫情影响,学校上课采用了在线教学。当然没课的人是体会不到那种“乐趣 ”的。
偶然间学妹说某课的教学视频在B站上下架了,看不了视频。
我本着乐于助人的态度,想着这种时候怎么可以怠惰,一定得让学弟学妹上好课。
首先思量着怎么去找到这视频,在一番操作无果之后,最终还是屈服于国内第一搜索引擎 。
在多次筛选后找到了视频来源:超星慕课 ,视频可以在线观看,课程视频数量过百 。
接着又想着把视频捣鼓到自己的电脑上看。
说干就干。
最先考虑的是IDM自带的网站探索。然而探半天没探出个什么所以然。
想了想手上能拿得出手的相应的技能也就炙手可热风靡各行各业的python。
干了兄弟萌!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 requestsimport reimport randomfrom fake_useragent import UserAgent import timeimport osimport shutilurl = input ("输入超星视频课程页面链接[如:http://mooc1.chaoxing.com/course/161102.html]:" ) fake_ua = UserAgent() headers = {'User-Agent' :fake_ua.random} 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' ) 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: f.write(req.content) print (v_soup.find(id ="nodeTitleEle" ).text+'complete!' ) time.sleep(5 +random.randint(1 ,11 )) num+=1 print ("所有视频下载完成!" )