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的迭代器和生成器使用实例
Jan 14 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
python中dir函数用法分析
Apr 17 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
我就是这样学习Python中的列表
Jun 02 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
python实现两个文件夹的同步
Aug 29 Python
python集成开发环境配置(pycharm)
Feb 14 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Python执行时间的几种计算方法
Jul 31 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
php使用正则过滤js脚本代码实例
2014/05/10 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
python统计文章中单词出现次数实例
2020/02/27 Python
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
《问银河》教学反思
2014/02/19 职场文书
搞笑创意广告语
2014/03/17 职场文书
美食节目策划方案
2014/05/31 职场文书
解除劳动合同协议书
2014/09/17 职场文书
婚礼父母答谢词
2015/01/04 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python