Python实现Youku视频批量下载功能


Posted in Python onMarch 14, 2017

前段时间由于收集视频数据的需要,自己捣鼓了一个YouKu视频批量下载的程序。东西虽然简单,但还挺实用的,拿出来分享给大家。

版本:Python2.7+BeautifulSoup3.2.1

import urllib,urllib2,sys,os
from BeautifulSoup import BeautifulSoup
import itertools,re
url_i =1
pic_num = 1
#自己定义的引号格式转换函数
def _en_to_cn(str):
  obj = itertools.cycle(['“','”'])
  _obj = lambda x: obj.next()
  return re.sub(r"['\"]",_obj,str)
if __name__ == '__main__':
  #下载连续3个网页的视频
  while url_i <= 3:
    webContent = urllib2.urlopen("http://news.youku.com/focus/index/_page26716_" + str(url_i) + ".html")
    data = webContent.read()
    #利用BeautifulSoup读取视频列表网页数据
    soup = BeautifulSoup(data)
    print "-------------------------Page " + str(url_i) + "-------------------------"
    #获得相应页面的视频thumbnail和title的list
    tag_list_thumb = soup.findAll('li','v_thumb')
    tag_list = soup.findAll('li', "v_title")
    for item in tag_list:
      #通过每个thumbnail中的herf导向视频播放页面
      web_video_play = urllib2.urlopen(item.a['href'])
      data_vp = web_video_play.read()
      #利用BeautifulSoup读取视频播放网页数据
      soup_vp = BeautifulSoup(data_vp)
      #找到“下载”对应的链接
      tag_vp_list = soup_vp.findAll('a', id = 'fn_download')
      for item_vp in tag_vp_list:
        #将下载链接保存到url_dw中
        url_dw = '"' + item_vp['_href'] + '"'
        print item.a['title'] + ": " + url_dw
        #调用命令行运行iku下载视频,需将iku加入环境变量
        os.system("iku " + url_dw)
    #保存每个视频的thumbnail
    for item_thumb in tag_list_thumb:
      urllib.urlretrieve(item_thumb.img['src'], "E:\\下载视频\\thumbnails\\" + str(pic_num) + "." +
                _en_to_cn(item_thumb.img['title']) + ".jpg")
      pic_num += 1
    print "--------------------------------------------------------------"
    print "--------Page " + str(url_i) + "'s video thumbnails have been saved!"
    url_i += 1

程序思想很简单,就是通过解析网页数据找到相应的视频播放网页链接,然后根据播放页面找到下载的链接,如下图所示:

Python实现Youku视频批量下载功能

由于从网页数据中获得的下载链接是必须通过youku自己的iku才能下载的。这一点费了我一番周折,侥幸发现iku这个软件的命令行非常简单(直接iku download_link即可),所以最简单的办法就是利用Python中的命令行接口os.system来调用iku来下载视频。另外注意程序运行之前需要先启动iku,否则下载完一个视频就要再启动一次。

PS:下载视频的时候就会发现,国内这些视频网页做的真的不够精细,含有太多的重复链接和坏死链接,小小鄙视一下。

以上所述是小编给大家介绍的Python实现Youku视频批量下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python简单计算文件夹大小的方法
Jul 14 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
python监控nginx端口和进程状态
Sep 06 Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
重写django的model下的objects模型管理器方式
May 15 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python lambda 表达式形式分析
Apr 03 Python
Python实现视频下载功能
Mar 14 #Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
Python的标准模块包json详解
Mar 13 #Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 #Python
Python中functools模块函数解析
Mar 12 #Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 #Python
You might like
PHP常用代码
2006/11/23 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php中JSON的使用方法
2015/04/30 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
关于反爬虫的一些简单总结
2017/12/13 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
计算机维护专业推荐信
2014/02/27 职场文书
python删除csv文件的行列
2021/04/06 Python