被浴帘的编译原理折磨了一个学期,又到了复习的时候,这学期因为疫情原因编译原理通过录制视频的方式来上,所以干脆就一次性爬下来当复习了。
课程是放在砺儒云课堂:https://moodle.scnu.edu.cn/course/view.php?id=9111,不过没授权的话一般人应该进不去,而要爬的话需要获取已授权的cookies,所以这个爬虫主要还是适用于这学期上课的同学😅。
先上代码:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from pyquery import PyQuery as pq
import os,time,requests
agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/75.0.3770.142 Chrome/75.0.3770.142 Safari/537.36'
headers = {
'user-agent': agent,
'Cookie': # your cookies copied from browser!
}
targetDir = os.path.join(os.path.dirname(os.path.abspath(__file__)),'asset')
print(targetDir)
if not os.path.isdir(targetDir):
os.mkdir(targetDir)
url = 'https://moodle.scnu.edu.cn/course/view.php?id=9111'
resp = requests.get(url,headers=headers)
doc = pq(resp.content)
lst = doc('a[href*=hvp]')
urls = []
for l in lst.items():
urls.append(l.attr('href'))
# https://my.oschina.net/u/4315079/blog/3530900/print
def downloadFile(name, url):
headers = {'Proxy-Connection': 'keep-alive'}
r = requests.get(url, stream=True, headers=headers)
length = float(r.headers['content-length'])
f = open(name, 'wb')
count = 0
count_tmp = 0
time1 = time.time()
for chunk in r.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
count += len(chunk)
if time.time() - time1 > 2:
p = count / length * 100
speed = (count - count_tmp) / 1024 / 2
count_tmp = count
print(name + ': ' + formatFloat(p) + '%' + ' Speed: ' + formatFloat(speed) + 'KB/S')
time1 = time.time()
f.close()
def formatFloat(num):
return '{:.2f}'.format(num)
count = 1
for url in urls:
print('count: %d | url: %s' % (count,url))
resp = requests.get(url,headers=headers)
doc = pq(resp.content)
name = str(count)+'_'+doc('h2').text()+'.mp4'
mp4base = str(resp.content).split('contentUrl":"')[1].split('","')[0].replace('\\\\','')
mp4name = '/videos'+str(resp.content).split('videos\\\\\\\\\\\\')[1].split('\\\\"')[0]
mp4url = mp4base+mp4name
path = targetDir+'/'+name
print(name,mp4url)
downloadFile(path, mp4url)
count += 1
里面用到的视频下载方法是参考这里的,主要requests时要把stream设置为True。
使用方法是:把代码放在一个新文件夹(不过这个你喜欢就好),在浏览器里登录砺儒云课堂后在开发者工具里复制cookie到代码的headers里,然后运行即可。cookies获取位置如图:
PS:代码只在Linux(Ubuntu18.04)测试过,在Windows可能需要做修改吧,(因为不想用re所以搞了几个split之类的,反正能用就好,好看肯定是不好看的了- -)
PPS:砺儒云没有对视频进行访问限制,就是说我拿到视频的url的话就可以看了,即使是我没有上编译原理这门课。这里也把视频url贴一下,有兴趣的也可以康康。根据这些url来爬也可以,还省了一步(不过还是要善待服务器的啊):
1_编译原理课程讲稿及参考源程序的下载网址.mp4: https://moodle.scnu.edu.cn/pluginfile.php/437297/mod_hvp/content/10073/videos/files-5e5dd590943fe.mp4
2_编译原理课程要求.mp4: https://moodle.scnu.edu.cn/pluginfile.php/475743/mod_hvp/content/12856/videos/files-5e5d351e64d27.mp4
3_编程语言的分类及设计.mp4: https://moodle.scnu.edu.cn/pluginfile.php/475750/mod_hvp/content/12857/videos/files-5e5d35e4862a4.mp4
4_编译过程分析.mp4: https://moodle.scnu.edu.cn/pluginfile.php/475759/mod_hvp/content/12858/videos/files-5e5d36bf9ef4b.mp4
5_基本概念及TINY语言分析.mp4: https://moodle.scnu.edu.cn/pluginfile.php/477226/mod_hvp/content/12860/videos/files-5e5d34b9e0dc7.mp4
6_正则表达式概念及构造方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/488208/mod_hvp/content/12867/videos/files-5e61c99851936.mp4
7_正则表达式扩充运算及DFA概念.mp4: https://moodle.scnu.edu.cn/pluginfile.php/488210/mod_hvp/content/12868/videos/files-5e61cc8834c3c.mp4
8_正则表达式转换为DFA的方法及NFA概念.mp4: https://moodle.scnu.edu.cn/pluginfile.php/488212/mod_hvp/content/12869/videos/files-5e61ce4c2f55f.mp4
9_正则表达式转换为NFA的实例分析及NFA转换为DFA的方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/488216/mod_hvp/content/12870/videos/files-5e6e1845a6aea.mp4
10_NFA转换为DFA例子分析以及DFA最小化的方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/499358/mod_hvp/content/12898/videos/files-5e6e17a966e2d.mp4
11_DFA最小化例子分析以及DFA转换为词法分析程序的方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/504612/mod_hvp/content/12902/videos/files-5e718a8b36249.mp4
12_第二章 词法分析 习题课1.mp4: https://moodle.scnu.edu.cn/pluginfile.php/515689/mod_hvp/content/12922/videos/files-5e770d5a4a9c3.mp4
13_第二章 词法分析 习题解答1.mp4: https://moodle.scnu.edu.cn/pluginfile.php/515695/mod_hvp/content/12923/videos/files-5e7754f8427ba.mp4
14_第二章 词法分析 习题解答2.mp4: https://moodle.scnu.edu.cn/pluginfile.php/515697/mod_hvp/content/12924/videos/files-5e7756f9c5fe8.mp4
15_文法的形式定义.mp4: https://moodle.scnu.edu.cn/pluginfile.php/526036/mod_hvp/content/12974/videos/files-5e81a6a85c622.mp4
16_语法分析相关的基本概念.mp4: https://moodle.scnu.edu.cn/pluginfile.php/526042/mod_hvp/content/12976/videos/files-5e8206f3d1968.mp4
17_算术表达式文法构建方法介绍.mp4: https://moodle.scnu.edu.cn/pluginfile.php/526046/mod_hvp/content/12977/videos/files-5e82b3a7104ef.mp4
18_二义性问题以及语法图的介绍.mp4: https://moodle.scnu.edu.cn/pluginfile.php/528493/mod_hvp/content/12982/videos/files-5e82e0becefb5.mp4
19_递归下降分析方法1.mp4: https://moodle.scnu.edu.cn/pluginfile.php/528685/mod_hvp/content/12983/videos/files-5e8b262c037ad.mp4
20_递归下降分析方法2.mp4: https://moodle.scnu.edu.cn/pluginfile.php/535182/mod_hvp/content/13028/videos/files-5e8b414a44599.mp4
21_实验二的内容及要求.mp4: https://moodle.scnu.edu.cn/pluginfile.php/535200/mod_hvp/content/13029/videos/files-5e8bf723cfefb.mp4
22_递归下降分析方法---实例分析1.mp4: https://moodle.scnu.edu.cn/pluginfile.php/538700/mod_hvp/content/13041/videos/files-5e945a47a6147.mp4
23_递归下降分析方法--实例分析2.mp4: https://moodle.scnu.edu.cn/pluginfile.php/538702/mod_hvp/content/13043/videos/files-5e9487fd1815a.mp4
24_递归下降分析方法--实例分析3.mp4: https://moodle.scnu.edu.cn/pluginfile.php/538723/mod_hvp/content/13045/videos/files-5e957a89db328.mp4
25_First 集合的计算.mp4: https://moodle.scnu.edu.cn/pluginfile.php/549297/mod_hvp/content/13051/videos/files-5e9aa24d5e893.mp4
26_First集合和Follow集合的计算.mp4: https://moodle.scnu.edu.cn/pluginfile.php/549299/mod_hvp/content/13053/videos/files-5e9ada4f8dfac.mp4
27_Follow集合的计算(续).mp4: https://moodle.scnu.edu.cn/pluginfile.php/549312/mod_hvp/content/13060/videos/files-5e9bee3defffd.mp4
28_递归下降分析法的习题讲解.mp4: https://moodle.scnu.edu.cn/pluginfile.php/555193/mod_hvp/content/13078/videos/files-5ea6f1bfa5ab8.mp4
29_TINY 语言的递归下降语法分析程序.mp4: https://moodle.scnu.edu.cn/pluginfile.php/561789/mod_hvp/content/13087/videos/files-5ea6f2216c41f.mp4
30_LL(1)语法分析方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/561796/mod_hvp/content/13088/videos/files-5ea823d84c879.mp4
31_LL(1)语法分析方法(续).mp4: https://moodle.scnu.edu.cn/pluginfile.php/561812/mod_hvp/content/13091/videos/files-5eb026fcd6c97.mp4
32_LL(1)语法分析方法(续2).mp4: https://moodle.scnu.edu.cn/pluginfile.php/566090/mod_hvp/content/13104/videos/files-5eb02951eae18.mp4
33_实验3的内容及要求.mp4: https://moodle.scnu.edu.cn/pluginfile.php/566091/mod_hvp/content/13105/videos/files-5eaeccc3104a3.mp4
34_自底向上语法分析方法.mp4: https://moodle.scnu.edu.cn/pluginfile.php/555194/mod_hvp/content/13079/videos/files-5eb0be623bc32.mp4
35_自底向上语法分析方法(续1).mp4: https://moodle.scnu.edu.cn/pluginfile.php/555195/mod_hvp/content/13080/videos/files-5eb0e8b56dbd0.mp4
36_自底向上语法分析方法(续2).mp4: https://moodle.scnu.edu.cn/pluginfile.php/561801/mod_hvp/content/13089/videos/files-5eb8eaac70acd.mp4
37_自底向上语法分析方法(续3).mp4: https://moodle.scnu.edu.cn/pluginfile.php/561802/mod_hvp/content/13090/videos/files-5eb93e9d65f84.mp4
38_自底向上语法分析方法(续4).mp4: https://moodle.scnu.edu.cn/pluginfile.php/570990/mod_hvp/content/13116/videos/files-5eb95e5653ac4.mp4
39_自底向上语法分析方法(续5).mp4: https://moodle.scnu.edu.cn/pluginfile.php/578525/mod_hvp/content/13140/videos/files-5ebe454767faa.mp4
40_自底向上语法分析方法(续6).mp4: https://moodle.scnu.edu.cn/pluginfile.php/578526/mod_hvp/content/13141/videos/files-5ebf78b04b147.mp4
41_第六章 语义分析及代码生成.mp4: https://moodle.scnu.edu.cn/pluginfile.php/578528/mod_hvp/content/13142/videos/files-5ec0095564e72.mp4
42_第六章 语义分析及代码生成(续1).mp4: https://moodle.scnu.edu.cn/pluginfile.php/578529/mod_hvp/content/13143/videos/files-5ec10f00e01a0.mp4
43_第六章 语义分析及代码生成(续2).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580365/mod_hvp/content/13149/videos/files-5ecc7047473f1.mp4
44_第六章 语义分析及代码生成(续3).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580366/mod_hvp/content/13150/videos/files-5ece544821c53.mp4
45_第六章 语义分析及代码生成(续4).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580367/mod_hvp/content/13151/videos/files-5ecd96016ca70.mp4
46_第六章 语义分析及代码生成(续5).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580376/mod_hvp/content/13154/videos/files-5ed6193597475.mp4
47_第六章 语义分析及代码生成(续6).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580380/mod_hvp/content/13156/videos/files-5ed6193049dad.mp4
48_第六章 语义分析及代码生成(续7).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580387/mod_hvp/content/13157/videos/files-5ed628ff1e2d1.mp4
49_实验四内容及要求.mp4: https://moodle.scnu.edu.cn/pluginfile.php/580396/mod_hvp/content/13158/videos/files-5ed4983283f92.mp4
50_第六章 语义分析及代码生成(续8).mp4: https://moodle.scnu.edu.cn/pluginfile.php/580405/mod_hvp/content/13162/videos/files-5edeec83b7af5.mp4
51_第六章 语义分析及代码生成(续9).mp4: https://moodle.scnu.edu.cn/pluginfile.php/593066/mod_hvp/content/13190/videos/files-5edf7a4d30690.mp4
52_第六章 语义分析及代码生成(续10).mp4: https://moodle.scnu.edu.cn/pluginfile.php/598804/mod_hvp/content/13195/videos/files-5edfa31fb04c7.mp4
53_第六章 语义分析及代码生成(续11).mp4: https://moodle.scnu.edu.cn/pluginfile.php/598806/mod_hvp/content/13196/videos/files-5ee99eb03c549.mp4
54_课程考试复习提要.mp4: https://moodle.scnu.edu.cn/pluginfile.php/598808/mod_hvp/content/13197/videos/files-5eea1306ec4b4.mp4
PPPS:后续可能会考虑把视频上传到网盘之类的,这个看需求吧,还有版权之类的也好麻烦 🤐 (有什么网盘推荐?)
PPPPS:侵删