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中的多行注释文档编写风格汇总
Jun 16 Python
python实现图片处理和特征提取详解
Nov 13 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
python爬取微信公众号文章的方法
Feb 26 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
Python实现微信翻译机器人的方法
Aug 13 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
python、Matlab求定积分的实现
Nov 20 Python
python和php哪个更适合写爬虫
Jun 22 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
twig里使用js变量的方法
2016/02/05 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
js实现日历
2020/11/07 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
python计算两个数的百分比方法
2018/06/29 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python str字符串转uuid实例
2020/03/03 Python
序列化Python对象的方法
2020/08/01 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
浅析NumPy 切片和索引
2020/09/02 Python
室内拓展活动方案
2014/02/13 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android