从yt-mp3 Python中提取下载链接

时间:2016-03-13 17:48:50

标签: python html parsing flask extract

我正在尝试使用Python为我的项目从yt-mp3中提取下载链接,但我找不到它。

这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

该网站旨在提取您想要获取的链接文本。因此,使用urllib2request无济于事。

要解决此问题,您需要使用类似selenium的内容来自动化Web浏览器。在这种情况下,您需要自动将鼠标悬停在下载按钮上。正是这个动作允许看到链接。

这可以按如下方式完成:

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