音悦台mv视频下载

参考了此处,做了修改,代码如下:
#coding:utf-8
import urllib2
import urllib
import re
import sys
import os
import time class Yinyuetai(): #地址初始化
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() def __init(self, page=1):
print u"开始下载:第 %d 页 ..." % page
reurl = self.url + "&page=%d" %page
page = self.getPage(reurl)
mvPageList = self.__getMvPageList(page)
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~~~~~~~~~~~完成!~~~~~~~~~~~~~~" #获取指定页面源码
def getPage(self, url):
try:
request = urllib2.Request(url, None, self.headers)
response = urllib2.urlopen(request, None, self.timeout)
return response.read()
except:
return [] #分析列表页,返回MV地址和名字列表[0]:视频ID[1]:视频名称
def __getMvPageList(self, page):
reg = r"<h3><a\shref=\"http:\/\/v.yinyuetai.com\/video\/([0-9]+)\".*title=\"(.*)\".*"
pattern = re.compile(reg)
findList = re.findall(pattern, page)
return findList
#print findList def getMvURL(self, mvlist):
url = "http://www.yinyuetai.com/insite/get-video-info?flex=true&videoId=%d" % int(mvlist[0])
html = self.getPage(url) 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]] #end def #下载文件
def downLoad(self, url, name):
name = name + '.flv'
print u"下载:[%s] [%d]" % (name, self.i)
local = self.makeDirs() + '/' + name
try:
urllib.urlretrieve(url, local, self.schedule)
print u"下载完成:[%s]\n" % name
except:
print u"下载失败!\n" def makeDirs(self):
path = sys.path[0]
newPath = os.path.join(path, 'flv')
if not os.path.isdir(newPath):
os.mkdir(newPath)
return newPath """
回调函数获取进度
@ 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() if __name__ == '__main__':
url = 'http://mv.yinyuetai.com/all?pageType=page&sort=weekViews&tab=allmv&parenttab=mv'
Yinyuetai(url)
音悦台mv视频下载的更多相关文章
- 获取youku视频下载链接(wireshark抓包分析)
随便说两句 前两天写了一个python脚本,试图以分析网页源码的方式得到优酷视频的下载地址,结果只得到视频的纯播放地址,下载纯播放地址得到的文件也无法正常播放视频. 这里共享一下播放地址得到的方法(想 ...
- 手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理
上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标 ...
- 手把手教你用python打造网易公开课视频下载软件2-编码相关说明
函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...
- 手把手教你用python打造网易公开课视频下载软件1-总述
写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...
- MyBatis环境搭建配置文件+入门视频下载
1.MyBatis优点 操作简单话,代码量少,效率高,成本就降低了 2.MyBatis缺点 参数只能限制为一个 selece语都要手动来写 3.与JDBC的关系:是对JDBC的扩展 把sql语句和ja ...
- 广州大学华软软件学院——NA视频下载
准备工具: 360极速浏览器(不要认错图标了): 浏览器视频下载插件: 第一步:安装浏览器插件 1.打开浏览器 2.解压,找到插件文件: 3.把插件拖到浏览器中: 4.添加,然后就完成了插件安装 查看 ...
- 如何进行Hadoop二次开发指导视频下载
本视频适合对Java有一定了解,熟悉java se的Hadoop爱好者,想对Hadoop进行二次开发.下面是以伪分布为例: 想对Hadoop二次开发:一.首先需要Hadoop和Java之间搭建Ecli ...
- 【教你zencart仿站 文章1至6教训 高清1280x900视频下载】[支持手机端]
[教你zencart仿站 第1至6课 高清晰1280x900视频下载][支持移动端] 经过筹备, 我们的课件最终出来了- 我们 zencart联盟合伙人 项目推出的 在线yy同步演示zencart仿站 ...
- Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】
前言 最近在研究Red5 流媒体服务框架,官网上的信息足以让一个新手入门 有官方參考手冊 -- 高速了解red5的相关信息 有Red5 on Stackoverflow -- 在上面能够提问或者回答 ...
随机推荐
- node.js---sails项目开发(3)
1.为新建的sails数据库新建一个用户,首先连接数据库 mongo localhost:27017 (1)显示所有数据库 (2)切换数据库 show dbs use sails 新建一个用户 账 ...
- Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)
SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...
- I2C通信
项目之前研究了I2C通信协议的实现,完成FPGA对视频解码芯片SAA7111A的初始化配置,设计实现了I2C主机对从机(SAA7111A)32个寄存器的写操作,因此只简单实现了I2C的写时序. 这次重 ...
- ajax异步请求返回对象
使用ajax异步请求返回一个对象. java code: @RequestMapping({"getAstSingleWheelImg_bbs"+Constant.JSON}) @ ...
- 批量编译目录下文件的Makefile
1.多C文件生成各自可执行文件的Makefile如果一个目录下有很多C文件,且每个C文件都能生成一个独立的可执行文件,那么想全编译这些C文件并生成各作的可执行文件,在该目录下编写一个Makefile文 ...
- Python:笔记(5)——错误、调试和测试
Python:笔记(5)——错误.调试和测试 错误处理 1.TRY语句 这个和Java中的语法是及其相似的,catach换成except. 说明:同样,不管有没有错误,fianlly都会执行的! 补充 ...
- springmvc 原生servlet支持
/** * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型 * * HttpServletRequest * HttpServletResponse * HttpSes ...
- rails 单数 复数 大写 小写转换 下划线 驼峰命名
downcase 变小写 pluralize 复数 singularize 单数 camelcase 驼峰 underscore : “MyScore”.undersocre ==> my_s ...
- jst格式化日期
jsp页面需引入fmt标签:<taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"> ...
- IO流参考
1 import java.io.File; import java.io.FileInputStream; /** * 读取一个字符 */ public class MyReadChar { pub ...