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多维数组切片方法
Apr 13 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
python多线程抽象编程模型详解
Mar 20 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
softmax及python实现过程解析
Sep 30 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
python使用rsa非对称加密过程解析
Dec 28 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 Python
python如何调用java类
Jul 05 Python
python如何操作mysql
Aug 17 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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支持页面回退的两种方法[转]
2007/02/14 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
jQuery select控制插件
2009/08/17 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
js实现蒙版效果
2020/01/11 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
前台文员的岗位职责
2013/11/14 职场文书
公司2015年终工作总结
2015/05/26 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
企业愿景口号
2015/12/25 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
Python OpenCV快速入门教程
2021/04/17 Python