最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Python实现Youku视频批量下载功能
时间:2017-06-26 编辑:简简单单 来源:一聚教程网
前段时间由于收集视频数据的需要,自己捣鼓了一个YouKu视频批量下载的程序。东西虽然简单,但还挺实用的,拿出来分享给大家。
版本:Python2.7+BeautifulSoup3.2.1
代码如下 | 复制代码 |
importurllib,urllib2,sys,os fromBeautifulSoupimportBeautifulSoup importitertools,re url_i=1 pic_num=1 #自己定义的引号格式转换函数 def_en_to_cn(str): obj=itertools.cycle(['“','”']) _obj=lambdax: obj.next() returnre.sub(r"['\"]",_obj,str) if__name__=='__main__': #下载连续3个网页的视频 whileurl_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") foritemintag_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') foritem_vpintag_vp_list: #将下载链接保存到url_dw中 url_dw='"' + item_vp['_href'] + '"' printitem.a['title']+": "+url_dw #调用命令行运行iku下载视频,需将iku加入环境变量 os.system("iku "+url_dw) #保存每个视频的thumbnail foritem_thumbintag_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 |
程序思想很简单,就是通过解析网页数据找到相应的视频播放网页链接,然后根据播放页面找到下载的链接,如下图所示:
由于从网页数据中获得的下载链接是必须通过youku自己的iku才能下载的。这一点费了我一番周折,侥幸发现iku这个软件的命令行非常简单(直接iku download_link即可),所以最简单的办法就是利用Python中的命令行接口os.system来调用iku来下载视频。另外注意程序运行之前需要先启动iku,否则下载完一个视频就要再启动一次。
PS:下载视频的时候就会发现,国内这些视频网页做的真的不够精细,含有太多的重复链接和坏死链接,小小鄙视一下。
-
下一个: php实现购物车产品删除功能
相关文章
- PHP导出数据超时的优化建议解读 10-31
- PHP之mysql位运算解析 10-31
- Laravel实现登录跳转功能解析 10-31
- php双向队列解读 10-31
- Laravel异常上下文解决教程 10-24
- php数组查询元素位置方法介绍 10-24