Получить ссылку на скачивание видео Coursera через программу
Я хочу извлечь ссылку на скачивание видео Coursera через программу (в основном Python) за этими ссылками
https://www.coursera.org/learn/calculus1/lecture/IYGhT/why-is-calculus-going-to-be-so-much-fun
После того, как вы прочитали много статей об этом, все еще не можете найти способ извлечь ссылку на скачивание видео через программу, кто-нибудь может предложить пошаговое решение для извлечения ссылки на скачивание видео? Спасибо!
PS Я знаю этот проект, но код такой сложный, что я бросил.
Спасибо за ответ, мне удалось сделать расширение для Chrome, чтобы загрузить видео http://mathjoy.tumblr.com/post/130547895523/mediadownloader
2 ответа
Сегодня я сделал себе Coursera-Downloader, используя python, пакет selenium, chromewebdriver(эти 3 инструмента необходимы в остальной части ответа)
Прежде всего, вам нужно найти нужный курс в Coursera и записаться на него. после этого вы должны выполнить приведенный ниже код и запустить его. это займет некоторое время, но результат (все ссылки на видео) будет записан в текстовом файле:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# ########################### #
# ####-fill these vars-###### #
# ########################### #
# coursera login information:
username = "~" # e.g. : username = "john@doe.com"
password = "~" # e.g. : password = "12345asdfg"
# course details to download IMPORTANT: you should be enrolled in the course
path_course = "https://www.coursera.org/learn/programming-languages/home/week/1" # link to the course first week e.g. : path_course = "https://www.coursera.org/learn/game-theory-1/home/week/1"
num_of_weeks = 5 # number of course weeks(or desired weeks to download) e.g. : num_of_weeks = 5
path_to_save = "E:\\programming-languages-coursera-links.txt" # path to the file in wich the links will be saved e.g. : path_to_save = "E:\\interactive-python-links.txt"
#############################
#############################
#############################
print_each_link = False
# defining functions :
def get_links_of_week(week_add):
"""
this function gets the download links from the course.
:param week_add: address to the specific week in order to get links
:return: a list containing all download links regarding the specific week.
"""
driver.get(week_add)
print("going for" + week_add)
driver.implicitly_wait(5)
elems = driver.find_elements_by_xpath("//a[@href]")
links = []
for elem in elems:
sublink = elem.get_attribute("href")
# print(sublink)
if sublink.find("lecture") != -1 and sublink not in links:
links.append(sublink)
# print("---------------")
# print(links)
inner_links = []
for link in links:
driver.get(link)
driver.implicitly_wait(5)
inner_elems = driver.find_elements_by_xpath("//a[@href]")
for inelem in inner_elems:
sub_elem = inelem.get_attribute("href")
# print(sub_elem)
if sub_elem.find("mp4") != -1:
print("the link : " + sub_elem[37:77] + "... fetched")
inner_links.append(sub_elem)
return inner_links
def get_week_list():
"""
this function gets the URL address from predefined variables from the top
:return: a list containing each week main page.
"""
weeks = []
print('list of weeks are : ')
for x in range(1, num_of_weeks + 1):
weeks.append(path_course[:-1] + str(x))
print(path_course[:-1] + str(x))
return weeks
# loading chrome driver
driver = webdriver.Chrome("E:\\chromedriver.exe")
# login to Coursera
driver.get(path_course)
driver.implicitly_wait(10)
email = driver.find_element_by_name("email")
email.click()
email.send_keys(username)
pas = driver.find_element_by_name("password")
pas.click()
pas.send_keys(password)
driver.find_element_by_xpath("//*[@id=\"rendered-content\"]/div/div/div/div[3]/div/div/div/form/button").send_keys(
Keys.RETURN)
# fetching links from each week web page
weeks_link = get_week_list()
all_links = []
for week in weeks_link:
all_links += get_links_of_week(week)
driver.close()
# write to file
print("now writing to file ...")
text_file = open(path_to_save, "w")
for each_link in all_links:
if print_each_link:
print(each_link + "\n")
text_file.write(each_link)
text_file.write("\n")
text_file.close()
print("---------------------------------")
print("all Links are fetched successfully")
прокомментируйте здесь, если у вас возникли проблемы.
Я бы использовал RequestsLib для отправки запросов на страницы, вход в систему и т. Д. И Beautiful Soup для анализа полученных данных. Общая идея что-то вроде
r = requests.get(url_you_want)
domTree = BeautifulSoup(r.text)
link=domTree.find(id="WhateverIDTheLinkHasInTheDownloadPage")
[...etc...]
Я не могу помочь вам, если вы хотите, чтобы кто-то сделал всю работу за вас, хотя...