我正在尝试使用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
答案 0 :(得分:0)
该网站旨在提取您想要获取的链接文本。因此,使用urllib2
或request
无济于事。
要解决此问题,您需要使用类似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