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的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
python中append实例用法总结
Jul 30 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
python实现IOU计算案例
Apr 12 Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 Python
python raise的基本使用
Sep 10 Python
五种Python转义表示法
Nov 27 Python
Django模型层实现多表关系创建和多表操作
Jul 21 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
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
python中判断文件结束符的具体方法
2020/08/04 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
回门宴答谢词
2014/01/13 职场文书
上党课的心得体会
2014/09/02 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
谢师宴邀请函
2015/02/02 职场文书
银行自荐信范文
2015/03/25 职场文书
2015年材料员工作总结
2015/04/30 职场文书
初二物理教学反思
2016/02/19 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python
使用Ajax实现进度条的绘制
2022/04/07 Javascript