我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们。尽管chrome和firefox的一些插件可以下载,但有时候下载下来是分段的视频,还要手动用ffmpeg合成一个视频太繁琐,而且用插件下载要点击好多次鼠标,太不符合linuxer的性格了哈~于是我用python3写了一个youkuDown.py,代码如下:

import re
import urllib.request
import json
import time
import random
import sysdef getVideoInfo(url):ruleTitle=re.compile('<title>(.*)</title>')ruleId=re.compile('http://v.youku.com/v_show/id_(.*).html')videoTitle=ruleTitle.findall(urllib.request.urlopen(url).read().decode('utf8'))videoId=ruleId.findall(url)return videoTitle[0],videoId[0]def getTrueLink(videoid):data=urllib.request.urlopen('http://v.youku.com/player/getPlayList/VideoIDS/'+videoid)info=json.loads(data.read().decode('utf8'))segs=info['data'][0]['segs']types=segs.keys()seed=info['data'][0]['seed']source=list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890")mixed=''while source:seed=(seed*211+30031)&0xFFFFindex=seed*len(source)>>16c=source.pop(index)mixed+=cids=info['data'][0]['streamfileids']['flv'].split('*')[:-1]vid=''.join(mixed[int(i)] for i in ids)sid='%s%s%s'%(int(time.time()*1000),random.randint(1000,1999),random.randint(1000,9999))urls=[]for s in segs['flv']:no='%02x'%int(s['no'])url='http://f.youku.com/player/getFlvPath/sid/%s_%s/st/flv/fileid/%s%s%s?K=%s&ts=%s'%(sid,no,vid[:8],no.upper(),vid[10:],s['k'],s['seconds'])urls.append(url)return urlsdef down2file(urls,filename):f=open(filename,'wb')fileNum=len(urls)count=0for url in urls:count+=1print('downloading file %d/%d'%(count,fileNum))req=urllib.request.Request(url,headers={'Referer':'http://www.youku.com'})data=urllib.request.urlopen(req).read()f.write(data)f.close()print('download '+filename+' OK!')def youkuDown(link):videotitle,videoid=getVideoInfo(link)urls=getTrueLink(videoid)down2file(urls,videotitle+'.flv')if __name__=='__main__':if len(sys.argv)<2:print('Example Usage: python3 youkuDown.py http://v.youku.com/v_show/id_XNjUzNDQwMzIw.html')print('')exit() youkuDown(sys.argv[1])

简单说明一下,因为优酷视频的真实链接是动态变化的,而每个视频的ID是不变的,比如在链接 http://v.youku.com/v_show/id_XNjUzNDQwMzIw.html中,“XNjUzNDQwMzIw”就是视频的唯一ID标识,通过这个ID可以通过GET方式请求“http://v.youku.com/player/getPlayList/VideoIDS/”+ID产生的新链接,得到json格式的视频信息,然后组装成视频的真实链接,这个真实链接也是有时效性的,而且向这个真实链接发起请求的时候必须把头的Referer设为www.youku.com骗过服务器才能下载,所以我没有像以前一样用os.system('wget '+url)这样搞起。还有,优酷对大的视频是分段的,所以得到的真实url我存在一个List里面,下载的时候会显示出共有几段以及实时下载了多少段。下面是我的使用举例:

保存到本地的视频播放情况:

在linux下想下载优酷视频的盆友们enjoy it~~同时祝大家新年愉快~~哈哈哈

转载请注明:转自http://blog.csdn.net/littlethunder/article/details/18230859

python3自动下载优酷视频小程序相关推荐

  1. python自动下载安装软件_python3自动下载优酷视频小程序

    我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们.尽管chrome和firefox的一些插件可以下载,但有 ...

  2. you-get下载优酷视频报错:用户账户异常、请重新登录

    you-get下载优酷视频报错:用户账户异常.请重新登录 登录失败的含义: 虽然我下载的是不需要登录就可以观看的视频,但是还是提示登录失败,这里登录失败的含义是优酷账号登录失败.(而不是you-get ...

  3. 下载优酷视频 基于python2

    参考于 http://blog.csdn.net/littlethunder/article/details/18230859 下载优酷视频 基于python2 import re import ur ...

  4. 怎样下载优酷视频到电脑上播放

    下载优酷视频上的视頻到电脑,有很多的方式,在其中有一种非常简单的,今日共享给大量的人了解. 01. 最先要进到优酷网 02. 在申请注册一个账户 03. 登录你申请注册的账户 04. 找到你喜爱的视頻 ...

  5. 如何在Linux中下载优酷视频

    如何在Linux中下载优酷视频? 有时候,我们不能保证随时都能很方便地连接到网络,因此,对于一些喜欢的视频,我们可能希望在有网络连接时下载下来,之后在没有网络连接时,也可以在本地观看.在Windows ...

  6. 如何直接下载优酷视频?不用优酷下载器下载视频方法技巧

    转载原地址:http://www.jb51.net/softjc/135042.html 以下为转载内容: 可能有许多朋友平常喜欢在优酷土豆下载视频观看,通常都只有安装i酷加速器或者飞速土豆软件才可以 ...

  7. 用awk下载优酷视频

    awk是一种优秀的文本处理工 具,用它来处理文本中的数据非常方便.我们现在用的绝大部分是gawk,也就是gnu awk,gnu的软件一贯表现不错,跟其他AWK的实现版本比起来,gawk添加了对网络的支 ...

  8. 优酷视频HTML网址自动播放,优酷视频html5嵌入代码

    视频是一种非常有效的表达方式: 在博客上用视频表达一些观点 在产品页提供demo视频,让用户更快了解产品,比如 Bungeer app 虽然可以将视频放在自己的server上,但对于非专攻视频的站点: ...

  9. 【转】怎么下载优酷视频

    [size=large]无需安装任何软件即可下载: 1.访问网站:http://www.kisstudou.com 2.将优酷视频播放地址复制到首页的文本框中回车 3.将出现视频名称和真实flv下载地 ...

最新文章

  1. 16625篇论文揭示25年来AI进化规律!深度学习时代行将结束!
  2. 初识Tcl(十):Tcl 过程
  3. FreeMarker 一二事 - 静态模板的使用与生成
  4. 服务器测试文档格式,服务器测试文档格式
  5. 交易学习--复盘软件及其使用方法
  6. android 无损分区,有什么可行办法把安卓4.4用的tf卡第一个分区从fat32无损转换成ext4?...
  7. 知其然,知其所以然——ArrayList.add()详解
  8. nuxt.js项目打包上传服务器pm2启动各种问题
  9. 2022年瑞典经济发展研究报告
  10. 2017IMO第五题
  11. 学习React Native必看的几个开源项目
  12. 面上大厂需要准备的面试题
  13. java word 题目导入_Java导入导出Excel和Word
  14. CMD快捷键(不区分大小写)——更新中
  15. 深度学习笔记(五):深度学习卷积核的计算理解,小卷积核和大卷积核的转换比较
  16. Wenli Zou's homepage
  17. 【调剂】东北石油大学计算机科学与技术专业接收调剂
  18. GFD233A 3BHE022294R0103
  19. 一款跨平台小巧的端口爆破工具
  20. for else语法

热门文章

  1. 关于Random(47)与randon.nextInt(100)的区别
  2. 【考研经验】2018四跨吉林大学计算机初试复试经验贴(67+72+99+141=379分)
  3. 企业如何做好员工关怀,减少人才流失
  4. 迷你股票行情,时刻给你最新行情。
  5. Android统一推送联盟成立
  6. linux通过文件修改密码,如何通过Linux系统来修改密码
  7. deepin v20显卡问题wifi网速慢cpu高频率发热(2021-1-23更新)
  8. on后面使用and和where的区别
  9. 电脑手机生产力提升操作
  10. 电脑长时间不操作造成卡死