MathJax.js
的替代 CDN截至 2013 年 2 月,Coursera 可以说是大规模开放在线课程(MOOC) 领域的领导者,拥有来自 62 个不同机构的 300 多个课程。教育工作者和机构的慷慨捐助为许多原本无法负担费用的人提供了优质的教育。甚至在世界偏远地区也有一些“脚踏实地”的非营利组织正在帮助传播财富(请参阅下面来自 Tunapanda 的反馈)。
该脚本可以更轻松地批量下载 Coursera 课程的讲座资源(例如视频、ppt 等)。给定一个或多个班级名称和帐户凭据,它从讲座页面获取周和班级名称,然后将相关材料下载到适当命名的文件和目录中。
为什么这有帮助?像 wget 这样的实用程序可以工作,但有以下限制:
wget
会拾取未发布/链接的额外视频,并且这些视频有时是重复的。像DownloadThemAll这样的浏览器扩展是另一种可能性,但coursera-dl
提供了更多功能,例如适当命名的文件。
这项工作最初部分受到 youtube-dl 的启发,我通过它下载了许多其他优秀视频,例如来自可汗学院的视频。
.netrc
文件中接受的登录凭据。coursera-dl.conf
文件加载的默认参数。coursera-dl
仅适用于 Coursera 允许您下载的材料。
我们不鼓励任何违反其使用条款的使用。相关摘录:
“[...] Coursera 授予您访问和使用网站的个人、非独占、不可转让的许可。您只能从网站下载材料用于您个人的非商业用途。您不得以其他方式复制、复制、转发、分发、出版、商业利用或以其他方式转让任何材料,也不得修改或创建该材料的衍生作品。”
coursera-dl
需要 Python 2 或 Python 3 以及注册感兴趣课程的免费 Coursera 帐户。 (截至 2020 年 2 月,我们使用 Python 版本 2.7、Pypy、3.6、3.7、3.8 和 3.9 自动测试程序的执行情况)。
注意:我们强烈建议您使用 Python 3 解释器(3.9 或更高版本)。
在任何操作系统上,确保将 Python 可执行文件位置添加到PATH
环境变量中,并且安装依赖项后(请参阅下一节),对于基本用法,您将需要从主目录调用脚本项目并在其前面添加单词python
。您还可以通过查看本文档的“运行脚本”部分来使用该程序的更多高级功能。
注意:您必须已经(手动)同意您想要与coursera-dl
一起使用的特定课程的荣誉代码。
从命令行(最好是从虚拟环境),只需发出以下命令:
pip install coursera-dl
这将从 Python 包索引 (PyPI) 下载该程序的最新发布版本以及所有必要的依赖项。此时,您应该准备好开始使用它。
如果这不起作用,因为您的 Python 2 版本太旧(例如 Ubuntu 14.4 上的 2.7.5),请尝试:
apt-get install python3 python3-pip
pip3 install coursera-dl
反而。
注 1:我们强烈建议您不要在计算机上全局安装该软件包(即使用 root/管理员权限),因为安装的模块可能会与您系统中安装的其他 Python 应用程序发生冲突(或者它们可能会干扰与coursera-dl
)。如果需要的话,最好使用选项--user
来pip install
。
注2:正如已经提到的,我们强烈建议您使用新的Python 3解释器(例如3.9或更高版本),因为Python 3比早期版本对SSL/TLS(用于安全连接)有更好的支持。
如果必须使用 Python 2,请确保至少有 Python 2.7.9(更高版本也可以)。
否则,您仍然可以使用coursera-dl
,但您必须安装额外的软件包ndg-httpsclient
,这可能涉及编译(至少在 Linux 系统上)。
我们强烈建议您考虑使用 pip 安装 Python 包,因为它是当前的首选方法,除非项目成员之一另有指示(例如,在测试或调试新功能或直接使用来自我们的 git 的源代码时)存储库)。如果您使用pip
,则可以使用pip install -r requirements.txt
直接安装需求文件中的所有依赖项。
我们强烈建议您以不干扰 Python 安装其余部分的方式安装coursera-dl
及其所有依赖项。这是通过创建虚拟环境或“virtualenv”来完成的。
对于初始设置,在类 Unix 操作系统中,请使用以下步骤(首先创建/调整目录/directory/where/I/want/my/courses
):
cd /directory/where/I/want/my/courses
virtualenv my-coursera
cd my-coursera
source bin/activate
git clone https://github.com/coursera-dl/coursera-dl
cd coursera-dl
pip install -r requirements.txt
./coursera-dl ...
要进一步从您的课程下载新视频,只需执行:
cd /directory/where/I/want/my/courses/my-coursera
source bin/activate
cd coursera-dl
./coursera-dl ...
我们正在努力简化整个过程,使其尽可能简单,但为了支持旧版本的 Python 并应对 Coursera 禁用 SSLv3 的情况,我们必须采取一些额外的步骤。无论如何,强烈建议您始终尽可能安装最新版本的 Python 解释器。
AUR 包:coursera-dl
警告:除非您有使用多个 Python 环境的经验,否则不建议使用此方法。
您可以使用pip
程序自行安装依赖项。它们都列在requirements.txt
文件中(开发所需的额外依赖项列在requirements-dev.txt
文件中)。
要使用此方法,您需要执行以下操作:
pip install -r requirements.txt
pip install -r requirements-dev.txt
仅当您打算帮助开发(并且始终欢迎帮助)或者项目维护者要求您安装额外的软件包以进行调试时,才需要上面的第二行。
再次强调,在提交错误报告之前,如果您自己安装了依赖项,请检查模块的版本是否至少是在requirements.txt
文件(以及requirements-dev.txt
文件,如果适用)中列出的版本。
如果您愿意,可以在 Docker 中运行该软件:
docker run --rm -it -v
"$(pwd):/courses"
courseradl/courseradl -u <USER> -p <PASSWORD>
或者使用 netrc 文件:
docker run --rm -it
-v "$(pwd):/courses" -v "$HOME/.netrc:/netrc"
courseradl/courseradl -n /netrc
coursera-dl 的实际工作目录是 /courses,如果您不另外指定,所有课程都将下载到那里。
python -m pip install coursera-dl
确保将Python安装路径添加到PATH系统环境变量中。这可以在“控制面板”>“系统”>“高级系统设置”>“环境变量”中找到。
Example:
C:Python39Scripts;C:Python39;
或者,如果您的安装权限受到限制并且已在 AppData 下安装了 Python,请将其添加到您的 PATH 中。
Example:
C:Users<user>AppDataLocalProgramsPythonPython39-32Scripts;C:Users<user>AppDataLocalProgramsPythonPython39-32;
Coursera-dl 现在可以从命令行或 powershell 运行。
如果您还没有,请创建一个 Coursera 帐户并注册课程。有关课程列表,请参阅 https://www.coursera.org/courses。
请参阅coursera-dl --help
以获取有关此实用程序支持的运行时选项的完整、最新参考。
通过提供您的 Coursera 帐户凭据(例如电子邮件地址和密码或~/.netrc
文件)、课程名称以及任何其他参数,运行脚本来下载材料:
General: coursera-dl -u <user> -p <pass> modelthinking-004
With CAUTH parameter: coursera-dl -ca 'some-ca-value-from-browser' modelthinking-004
如果您不想在命令行中以纯文本形式输入密码,可以使用不带-p
选项的脚本。在这种情况下,一旦脚本运行,系统将提示您输入密码。
以下是如何从命令行调用coursera-dl
的一些示例:
Without -p field: coursera-dl -u <user> modelthinking-004
Multiple classes: coursera-dl -u <user> -p <pass> saas historyofrock1-001 algo-2012-002
Filter by section name: coursera-dl -u <user> -p <pass> -sf "Chapter_Four" crypto-004
Filter by lecture name: coursera-dl -u <user> -p <pass> -lf "3.1_" ml-2012-002
Download only ppt files: coursera-dl -u <user> -p <pass> -f "ppt" qcomp-2012-001
Use a ~/.netrc file: coursera-dl -n -- matrix-001
Get the preview classes: coursera-dl -n -b ni-001
Download videos at 720p: coursera-dl -n --video-resolution 720p ni-001
Specify download path: coursera-dl -n --path=C:CourseraClasses comnetworks-002
Display help: coursera-dl --help
Maintain a list of classes in a dir:
Initialize: mkdir -p CURRENT/{class1,class2,..classN}
Update: coursera-dl -n --path CURRENT `ls CURRENT`
注意:如果您的ls
命令使用别名来显示彩色输出,您可能会遇到问题。请务必转义ls
命令(使用ls
)以确保不会将特殊字符发送到脚本。
请注意,我们确实支持新平台(“点播”)课程。
默认情况下,视频以 540p 分辨率下载。对于点播课程, --video-resolution
标志接受 360p、540p 和 720p 值。
要仅下载.txt
和/或.srt
字幕文件而不是视频,请使用-ignore-formats mp4 --subtitle-language en
或视频编码的任何格式以及所需的字幕语言。
在 *nix 平台上,使用~/.netrc
文件是每次在命令行上指定用户名(即您的电子邮件地址)和密码的一个很好的替代方法。要使用它,只需将如下一行添加到主目录(如果您使用的是 Windows,则为等效目录)中名为.netrc
文件中,其内容如下:
machine coursera-dl login <user> password <pass>
如果该文件尚不存在,则创建该文件。从那时起,您可以从使用-u
和-p
切换到简单地使用选项-n
调用coursera-dl
。这特别方便,因为直接在命令行上输入用户名(电子邮件地址)和密码可能会很烦人(如果您碰巧选择了“强”密码,则更令人厌烦)。
或者,如果您想存储首选参数(可能还包括您的用户名和密码),请创建一个名为coursera-dl.conf
的文件,脚本应在其中执行,格式如下:
--username <user>
--password <pass>
--subtitle-language en,zh-CN|zh-TW
--download-quizzes
#--mathjax-cdn https://cdn.bootcss.com/mathjax/2.7.1/MathJax.js
# more other parameters
如果在命令行上再次提供文件中指定的参数,这些参数将被覆盖。
注意:在coursera-dl.conf
中,所有参数不应用引号引起来。
在默认模式下,当您通过按CTRL + C中断下载过程时,部分下载的文件将从磁盘中删除,您必须从头开始下载过程。如果您的下载被键盘中断 ( CTRL + C ) 以外的其他原因中断,例如突然的系统崩溃,部分下载的文件将保留在您的磁盘上,下次您再次启动该过程时,这些文件将从下载列表中丢弃!因此,您的工作是在下次开始之前手动删除它们。因此,我们添加了一个名为--resume
的选项,它可以从停止的地方继续下载:
coursera-dl -u <user> -p <pass> --resume sdn1-001
此选项也可以与外部下载器一起使用:
coursera-dl --wget -u <user> -p <pass> --resume sdn1-001
注 1 :某些外部下载器使用其自己的内置恢复功能,该功能可能与其他下载器不兼容,因此使用它们的风险由您自行承担。
注意 2 :请记住,在恢复模式下,中断的文件不会从磁盘中删除。
注意:如果您的密码包含标点符号、引号或其他“有趣的字符”(例如<
、 >
、 #
、 &
、 |
等),那么您可能必须将它们从 shell 中转义。对于 bash 或其他 Bourne-shell 克隆(可能还有许多其他 shell),更好的方法之一是将密码用单引号引起来,这样就不会遇到问题。有关详细信息,请参阅问题 #213。
如果您在下载课程资料时遇到问题,请尝试查看以下操作之一是否可以解决您的问题:
确保您使用的类名称与该类的 URL 中使用的资源名称相对应: https://www.coursera.org/learn/<CLASS_NAME>/home/welcome
/welcome
您是否尝试过使用--clear-cache
选项清除缓存的 cookie/凭据?
请注意,许多课程(也许是大多数?)可能会在课程完成后一段时间后删除这些材料,而其他课程可能会保留这些材料直到同一课程的下一个课程/课程(以避免学术不诚实的问题,显然)。
简而言之,我们不保证您在课程结束后能够下载,不幸的是,我们无法为您提供任何帮助。
确保您已根据上述requirements.txt
文件安装和/或更新了所有依赖项。
可以使用浏览器扩展 (1, 2) 导出 Netscape 样式的 cookie 文件,并将其与-c
选项一起使用。当通过密码进行身份验证不起作用时(身份验证过程不时发生变化),这会派上用场。
如果结果显示 0 个部分,您很可能提供了无效的凭据(在命令行、 .netrc
文件或coursera-dl.conf
文件中的用户名和/或密码)。
对于尚未开始但之前已经进行过迭代的课程,有时可以提供预览,其中包含上一课程的所有课程。可以通过传递--preview
参数来下载这些文件。
如果您收到类似Could not find class: <CLASS_NAME>
的错误,则:
class
和课程的当前版本(数字)组成。例如,对于名为class
的类,您必须使用class-001
、 class-002
等。如果:
使用-n
指定要使用.netrc
文件时出现错误,并且,
您希望脚本使用默认的 netrc 文件,并且,
您收到一条消息,显示coursera-dl: error: too few arguments
然后,您应该在-n
之后指定--
作为参数,即-n --
或更改将参数传递给脚本的顺序,以便-n
之后的参数以连字符 ( -
) 开头。否则,Python 的argparse
模块会认为你传递的是你想要使用的 netrc 文件的名称。请参阅问题 #162。
如果您的密码包含空格,请不要忘记使用引号书写。
您安装了正确的项目吗?
警告:如果您使用 PyPi (pip) 安装脚本,请验证您是否安装了正确的项目。我们必须在 pip 中使用不同的名称,因为我们的原始名称已被占用。请记住使用以下命令安装它:
pip install coursera-dl
如果您来自中国并且在下载视频时遇到问题,请在主机文件 (/etc/hosts) 中添加“52.84.167.78 d3c33hcgiwev3.cloudfront.net”并使用“ipconfig/flushdns”刷新 DNS 可能会起作用(请参阅 https: //github.com/googlehosts/hosts 了解更多信息)。
首先,请确保您已注册要下载的课程。
许多旧课程已经停止招生,因此通常无法选择。在这种情况下,请尝试使用--preview
选项下载。有些课程允许在不注册的情况下下载讲座材料,但这并不常见,并且不能保证适用于每门课程。
最后,如果您至少有列出所有课程材料的索引文件,则可以下载视频。也许您已注册的朋友可以为您保存该课程页面。在这种情况下,请使用--process_local_page
选项。
或者,您可能想尝试针对此问题设计的各种浏览器扩展。
如果以上方法都不适合您,我们无能为力。
Coursera-dl 支持外部下载器,但请注意,它们仅用于在解析教学大纲后下载材料,例如视频、PDF、一些讲义和其他文件(教学大纲始终使用内部下载器下载)。如果您在下载此类材料时遇到问题,您可能需要开始使用外部下载程序并配置其超时值。例如,您可以通过传递--aria
选项来使用 aria2c 下载器:
coursera-dl -n --path . --aria2 <course-name>
并将其放入 aria2c 的配置文件~/.aria2/aria2.conf
中以减少超时:
connect-timeout=2
timeout=2
bt-stop-timeout=1
不支持内部下载器的超时配置。
如果您在代理后面的 Windows 上,请在运行脚本之前设置环境变量,如下所示:
set HTTP_PROXY=http://host:port
set HTTPS_PROXY=http://host:port
相关讨论:#205
在C:Users<user>AppDataLocalProgramsPythonPython39-32Scripts
或任何安装了 Python 的地方(以上是 Windows 的默认设置)在空闲状态下编辑以下文件:(右键单击脚本名称并选择“编辑”菜单中有空闲)
coursera-dl-script
从
#!c:users<user>appdatalocalprogramspythonpython39-32python.exe
到
#"!c:users<user>appdatalocalprogramspythonpython39-32python.exe"
(添加引号)。这是一个已知的 pip 错误。
来源:第 500 期 StackOverflow
这是一个已知错误,请不要报告此错误消息!问题出在您的环境中。要修复该问题,请执行以下操作:
sudo apt-get install build-essential python-dev libssl-dev libffi-dev
pip install --user urllib3 pyasn1 ndg-httpsclient pyOpenSSL
如果错误仍然存在,请尝试按照以下说明从 github 安装 coursera-dl:https://github.com/coursera-dl/coursera-dl#alternative-installation-method-for-unix-systems
如果您仍然遇到问题,请阅读以下问题以获取有关如何解决该问题的更多想法:#330 #377 #329
这也值得一读:https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning
MathJax.js
的替代 CDN保存课程页面时,我们通过在标头中注入MathJax.js
来启用数学方程的MathJax
渲染。该脚本使用 mathjax.org 提供的 CDN 服务。但是,该 url 在某些国家/地区无法访问,您可以提供--mathjax-cdn <MATHJAX_CDN>
参数来指定在您所在地区可以访问的MathJax.js
文件。
在报告任何问题之前,请按照以下步骤操作:
验证您是否正在运行最新版本的脚本及其依赖项的推荐版本,请在文件requirements.txt
中查看它们。如果有疑问,请使用以下命令:
pip install --upgrade coursera-dl
如果问题仍然存在,请随时在我们的错误跟踪器中打开问题,请在问题模板中填写尽可能多的信息。
在报告coursera-dl
错误时,请不要忘记提供足够的信息,以便我们可以帮助您:
requirements.txt
中查看它们。--debug
选项。请复制并粘贴它们。不要改写/解释这些消息。我喜欢获得反馈。以下是我收到的一些评论:
“感谢您的出色工作!由于您的剧本,知识将更多地淹没世界!”
纪尧姆五世 11/8/2012
“只是想向您发送 Python 脚本的支持,以下载 Coursera 课程。我在肯尼亚的非营利组织中一直使用它,以便在互联网非常昂贵且不可靠的地方提供在线课程。这里的大多数孩子都负担不起高中,通过通常的方式下载其中一门课程的费用比普通家庭一周的收入还要高,谢谢!”
Jay L.,图纳潘达 2013 年 3 月 20 日
“我是 Coursera 的忠实粉丝,参加了很多不同的课程。时间限制不允许我同时参加我想要的所有课程。我看到了您的脚本,我很高兴使用它!很棒的东西感谢您在 Github 上提供此内容 - 干得好!”
威廉·G.2/18/2013
“这个脚本太棒了!我煞费苦心地手动下载每个视频和 ppt — 查看了 wget,但遇到了 HTML 的通配符问题,然后..我发现了您的脚本。无法告诉您您花了多少小时刚刚救了我:)如果你在巴黎/斯德哥尔摩,我绝对一定要给你买啤酒:)”
拉兹万 T. 11/26/2012
“多谢! :)”
维克托五世 24/04/2013
请在 github 上发布错误和问题。请不要私下向维护人员发送支持请求!我们被日常活动淹没了。如果您遇到问题,请将其归档到问题跟踪器上。