2016-03-13 1 views
0

Я пытаюсь извлечь ссылку для загрузки из yt-mp3 с Python для моего проекта, но я не смог ее найти.Extract ссылка для загрузки из yt-mp3 Python

Вот мой код:

from BeautifulSoup import BeautifulSoup 
from bs4 import BeautifulSoup 
import urllib2 

#http://www.yt-mp3.com/watch?v=cXAxpoC8o9w 

url = "http://www.yt-mp3.com/watch?v="+"cXAxpoC8o9w"#YT video ID 
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 
     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
     'Accept-Encoding': 'none', 
     'Accept-Language': 'en-US,en;q=0.8', 
     'Connection': 'keep-alive'} 


req = urllib2.Request(url,headers=hdr) 
website = urllib2.urlopen(req) 

html = website.read() 
soup = BeautifulSoup(html) 
links = soup.find_all('a') 

for tag in links: 
    link = tag.get('href',None) 
    if link is not None: 
     print link 
+0

Распечатайте возвращаемый HTML, нет '' теги. – PaulMcG

ответ

0

Сайт был разработан, чтобы сделать его трудно извлечь текст ссылки, который вы пытаетесь получить. Таким образом, использование urllib2 или request не поможет.

Чтобы обойти эту проблему, вам необходимо использовать что-то вроде selenium для автоматизации веб-браузера. В этом случае вам необходимо автоматизировать зависание над кнопкой загрузки. Именно это действие позволяет видеть ссылку.

Это может быть сделано следующим образом:

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
import time 

browser = webdriver.Firefox() 
browser.get("http://www.yt-mp3.com/watch?v=cXAxpoC8o9w") 
time.sleep(6) 
download = browser.find_element_by_class_name('download') 
ActionChains(browser).move_to_element(download).perform() 
print "MP3 link is", download.get_attribute("href") 

Дальнейшие улучшения могут быть сделаны, чтобы удалить sleep().

Это будет отображать что-то вроде:

MP3 link is http://dl13.yt-mp3.com/download/tom-clancy-s-rainbow-six-vegas-2-gameplay-part-3.mp3?id=cXAxpoC8o9w&title=Tom+Clancy%27s+Rainbow+Six+Vegas+2+gameplay+part+3&t=1457899780&extra=a&h=75c5c580bf5c2791725b392d5b6cfcc75d8dd272 
+0

Я использую Cloud9 для запуска этого и не работает, поэтому любое другое решение? и благодарю вас. –

+0

Проблема в том, что вам нужно что-то запустить javascript на странице. Я не проверял, будет ли он выполнять дополнительные запросы после загрузки. Это может дать вам ключ. –

+0

Не Cloud9 также поддерживает тестирование Selenium? Стоит исследовать. –