下载优酷视频 基于python2

参考于 http://blog.csdn.net/littlethunder/article/details/18230859

下载优酷视频 基于python2

import re
import urllib2
import json
import time
import random
import sys

def getVideoInfo(url):
    ruleTitle=re.compile('<title>(.*)</title>')
    ruleId=re.compile('http://v.youku.com/v_show/id_(.*).html')
    videoTitle=ruleTitle.findall(urllib2.urlopen(url).read().decode('utf8'))
    videoId=ruleId.findall(url)
    return videoTitle[0],videoId[0]

def getTrueLink(videoid):
    data=urllib2.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)&0xFFFF
        index=seed*len(source)>>16
        c=source.pop(index)
        mixed+=c

    ids=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 urls

def down2file(urls, filename):
    f=open(filename, 'wb')
    fileNum=len(urls)
    count=0
    for url in urls:
        count+=1
        print('downloading file %d/%d'%(count,fileNum))
        req=urllib2.Request(url,headers={'Referer':'http://www.youku.com'})
        data=urllib2.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__':
    url = 'http://v.youku.com/v_show/id_XNzE0NzkyMTky.html'
    videotitle, videoid = getVideoInfo(url)

    urls = getTrueLink(videoid)
    down2file(urls, videotitle+'.flv')




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值