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 上發布錯誤和問題。請不要私下向維護人員發送支援請求!我們被日常活動淹沒了。如果您遇到問題,請將其歸檔到問題追蹤器上。