音悦台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 -- 在上面能够提问或者回答 ...
随机推荐
- rest_framework 认证与权限
一 认证 1.1先写个类(认证组件) from app01 import models from rest_framework import exceptions from rest_framewo ...
- 蛇形命名法(snake case)驼峰命名法(camel case)字符转换问题
描述小 Hi 写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name. line_number.小 Ho 写程序时习惯用驼峰命名法(camel ...
- python DES3 加密解密
背景:想给公司的进件流程写一套进件脚本,首先遇到的就是加密解密.公司用的 DES3 + base64 加密解密 一.安装 pycrypto模块,推荐用pycrypto编译文件,直接下载安装就行 ht ...
- DBMS_MONITOR程序开启10046事件
在具有连接池或共享服务器的多层环境中,一个会话可以跨越多个进程,甚至跨越多个实例.DBMS_MONITOR是在Oracle 10g中引入的内置的程序包,通过该程序包可以跟踪从客户机到中间层.再到后端数 ...
- CSS 之怀疑自己的审美 1 (Day49)
CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一.css的四种引入方式 1.行内式 行内式是在标 ...
- 简单的menu和点击(包括alertDialog定制)
import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android. ...
- Ecstore 会员中心 菜单添加一项
1.会员中心 添加菜单 ecstore_合并支付总结_会员中心添加菜单_20160113 class : b2c_ctl_site_member (图 1) 第一步: (图1) ...
- linux 基础知识总结2
1. 设定文件text的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限:chmod ug+w,o-x log2012.log 权限选择参 ...
- 【笔记】c++文件
1.文件. #include <iostream> #include <cstdio> #include <string> #include <cstring ...
- Linux关于yum命令Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
Linux关于yum命令Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx. 问题: Linux ...