音悦台 MV 下载 python 版本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#encoding:utf8
import urllib2
import urllib
import re
import sys
import os
import time

def Schedule(a,b,c):
    per = 100.0 * a * b / c
    if per > 100 : per = 100
    sys.stdout.write(u"------进度:%.1f%%\r" % per)
    sys.stdout.flush()
	
def createDir():
	path = sys.path[0]
	new_path = os.path.join(path,'flv')
	if not os.path.isdir(new_path):
		os.mkdir(new_path)
	return new_path
	
def getList(id):
	url  = "http://www.yinyuetai.com/insite/get-video-info?flex=true&videoId=%d" % id
	headers = {
		'User-Agent':'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
	}
	try:
		req = urllib2.Request(url, None, headers)
		res = urllib2.urlopen(req)
		html = res.read()
		reg = r"http://\w*?\.yinyuetai\.com/uploads/videos/common/.*?(?=&br)"
		pattern=re.compile(reg)
		findList = re.findall(pattern,html)
		if len(findList) >= 3:
			return findList[2]
		else:
			return findList[0]
	except:
		print u"读取视频列表失败!"
		
def download(id,name):
	link = getList(id)
	if link:
		name = name + '.flv'
		print u"下载:[%s]" % name
		local = createDir()+'/'+name
		try:
			urllib.urlretrieve(link,local,Schedule)
			print u"------下载完成:[%s]\n" % name
		except:
			print u"下载失败!\n"
		#for url in urlList: #下载全部
			#name = url.split('/')[-1].split('?')[0]
			#name = getFlvName(id)+'-%d.flv' % i
			#print u"下载:[%s]" % name
			#local = createDir()+'/'+name
			#urllib.urlretrieve(url,local,Schedule)
			#i += 1
			#print u"    下载完成:[%s]" % name
			#print ''
	else:
		print u"没有发现视频!\n"

def getFlvName(id):
	headers = {
		'User-Agent':'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
	}
	timeout = 5
	
	url = 'http://v.yinyuetai.com/video/%d' % id
	request = urllib2.Request(url, None, headers)
	response = urllib2.urlopen(request, None, timeout)
	responseHtml = response.read()
	#print responseHtml
	pattern=re.compile(r"<h3\sclass=\"fl\sf18\">(.+)<\/h3>")
	findList = re.findall(pattern,responseHtml)
	try:
		return findList[0].decode('utf8')
	except:
		return False

def start():
	while 1:
		id = raw_input('ID:>')
		try:
			id = int(id)
			break
		except:
			pass

	name = getFlvName(id) #读取mv名字
	if name == False: #读取失败则输入
		print u'获取MV名字失败!输入MV名字'
		name = raw_input(u'name:>')
		name = name.decode('gbk')
	#开始下载
	print u"开始下载..."
	download(id,name)
	start()

if __name__ == '__main__':
	start()