加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

音悦台mv批量下载-python

发布时间:2020-12-17 17:21:25 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #encoding: UTF-8"""音悦台mv批量下载2015-02-11[email?protected]"""import urllib2import urllibimport reimport sysimport osimport timeclass Yin

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#encoding: UTF-8
"""
音悦台mv批量下载
2015-02-11
[email?protected]
"""
import urllib2
import urllib
import re
import sys
import os
import time

class Yinyuetai():
	"""
	构造函数
	@param url mv 列表地址
	"""
	def __init__(self,url):
		self.i = 1
		self.url = url
		self.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'
		}
		self.timeout = 30
		self.__init()
	#end def
	
	def __init(self,page=1):
		print u"开始下载:第 %d 页 ..." % page
		reurl = self.url + "&page=%d" % page
		#print reurl
		mvPageList = self.__getMvPageList(reurl)
		if len(mvPageList) > 0:
			for plist in mvPageList:
				mvlist = self.getMvUrl(plist)
				self.__download(mvlist[0],mvlist[1].decode("utf-8"))
				self.i += 1
			time.sleep(2)
			page += 1
			self.__init(page)
		else:
			print u"n~~~~~~~~~~~~完成!~~~~~~~~~~~~"
			
	#end def
	
	"""
	分析列表页
	return 返回MV地址和名字列表[0]:视频ID[1]:视频名称
	"""
	def __getMvPageList(self,url):
		try:
			request = urllib2.Request(url,None,self.headers)
			response = urllib2.urlopen(request,self.timeout)
			responseHtml = response.read()
			
			reg = r"<h3><ashref="http://v.yinyuetai.com/video/([0-9]+)".*title="(.*)".*"
			pattern=re.compile(reg)
			findList = re.findall(pattern,responseHtml)
			return findList
		except:
			return []
	
	#end def
	
	"""
	读取视频列表
	@param mvlist 页面视频ID和名字列表
	return 返回视频地址(第一个地址)(如果有3个地址,则返回最后一个地址(高清))
	"""
	def getMvUrl(self,mvlist):
		url = "http://www.yinyuetai.com/insite/get-video-info?flex=true&videoId=%d" % int(mvlist[0])
		try:
			req = urllib2.Request(url,self.headers)
			res = urllib2.urlopen(req,self.timeout)
			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],mvlist[1]]
			else:
				return [findList[0],mvlist[1]]
		except:
			print u"	读取视频列表失败!n"
	
	#end def
	
	"""
	下载文件
	@param url 视频地址
	@param name 视频名称
	"""
	def __download(self,url,name):
		name = name + '.flv'
		print u"	下载:[%s]  [%d]" % (name,self.i)
		local = self.__createDir()+'/'+name
		try:
			urllib.urlretrieve(url,local,self.__schedule)
			print u"	下载完成:[%s]n" % name
		except:
			print u"	下载失败!n"
	
	"""
	检查文件保存路径是否存在,不存在则创建
	return 文件保存路径
	"""
	def __createDir(self):
		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
		
	#end def
	
	"""
	回调函数获取进度
	@ a 已经下载的数据块
	@ b 数据块的大小
	@ c 远程文件的大小
	"""
	def __schedule(self,a,b,c):
		per = 100.0 * a * b / c
		if per > 100 : per = 100
		sys.stdout.write(u"	进度:%.1f%%r" % per)
		sys.stdout.flush()
		
	#end def
	
#end class		
if __name__ == '__main__':
	url = 'http://mv.yinyuetai.com/all?pageType=page&sort=weekViews&tab=allmv&parenttab=mv'
	Yinyuetai(url)

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读