2015-06-30 2 views
2

Я хочу извлечь видео скачать Coursera ссылку с помощью программы (в основном Python) за эти ссылкиполучить Coursera видео скачать ссылку через программу

https://www.coursera.org/learn/human-computer-interaction/lecture/s4rFQ/the-interaction-design-specialization

https://www.coursera.org/learn/calculus1/lecture/IYGhT/why-is-calculus-going-to-be-so-much-fun

После красных много статей об этом, до сих пор не может найти способ извлечь ссылку для загрузки видео через программу, любой может предложить пошаговое решение по извлечению ссылки для загрузки видео? Благодаря!

P.S. Я знаю проект this, но код настолько сложный, что я бросил.


Спасибо за ответ, я преуспевшее сделало расширение хрома скачать видео http://mathjoy.tumblr.com/post/130547895523/mediadownloader

ответ

0

Я хотел бы использовать RequestsLib делать запросы на страницы, вход и т.д., и Beautiful Soup для анализа полученных данных. Общая идея что-то вроде

r = requests.get(url_you_want) 
domTree = BeautifulSoup(r.text) 
link=domTree.find(id="WhateverIDTheLinkHasInTheDownloadPage") 
[...etc...] 

Я не могу вам помочь, если вы хотите, чтобы кто-то сделать полноту работы для вас, хотя ...

+0

Да, я знаю два пакета, я также могу войти в Coursera через Python, трудно понять, как найти ссылку для загрузки видео со страницы. – iMath

+0

Имеет ли ссылка определенный тип или идентификатор в источнике? Надеюсь, одна из этих двух вещей будет правдой; альтернативой является попытка проверить, отображается ли она в одном месте в дереве DOM каждый раз. – argentage

1

сегодня я сделал себе 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 = "[email protected]" 
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") 

комментарий здесь, если у вас есть какие-либо проблемы.

Смежные вопросы