八大队专属技能——高效的脚本

八大队专属技能——高效的脚本_第1张图片

作为全苏警院最富有科技感,走在科技最前沿,踏着最新的时代潮流的计算机大队的一员,那必须"有两把刷子"才行啊。计算机在人们的生活中越来越普及,高效地使用计算机也会成为学习工作必备的软技能。
而我们计算机大队在这方面则是天赋异禀啊,这正是我们学以致用的好机会!
po主这就来和你们分享一个批量下载视频的小脚本。

需求来源

促成我写这个脚本的需求是……看《人民的名义》(⊙﹏⊙)


八大队专属技能——高效的脚本_第2张图片
达康书记同款水杯

如大家所知,现在国内的视频网站是漫山遍野的广告,每次看视频都要浪费很多的时间去等广告。
就拿某酷来说,一集人民的名义你会等上大约2分钟才能看到,实在是太浪费时间了。所以,我会把视频缓存下来。然而该酷的手机客户端十分的臃肿,连缓存的视频也要你看广告!!(╯‵□′)╯︵┻━┻
而该酷的PC版客户端更是弹窗不断,还不时地在你的右下角发送一些页游的广告,实在让po主失望_(:з」∠)_

问题解决

但是,这点小问题怎么可能会难道我们八大队的人呢(。・`ω´・)
愤怒的po主立刻掏出了神器:


八大队专属技能——高效的脚本_第3张图片

没错,解决的方法就是用Python这个神奇的语言写出一个脚本来,让我一键就可以从该酷的网站上批量Get视频。

Python官方网站: http://www.python.org
建议大家使用Python3,对中文更友好,也是未来的大趋势

一个能直接从网站上Down视频的工具

经过查找,我发现一款轻量级的工具:you-get
这款工具是基于Python开发的模块,安装后会自动在当前系统中添加“you-get”命令。
安装方法:(前提是已安装Python)在cmd或者终端中输入命令
pip3 install you-get
安装好后就可以直接在命令行中使用了

八大队专属技能——高效的脚本_第4张图片

用法:you-get+空格+选项+视频的网址
根据选项可以实现诸如探测不下载,通过代理下载,限速下载等
下一步要做的事就是如何结合you-get实现批量下载

下载一集《人民的名义》试试看


八大队专属技能——高效的脚本_第5张图片

you-get默认会下载最高的清晰度,可以用-i选项进行探测后用--format选项选择合适的清晰度下载。

获取视频URL并转化为you-get命令

《人民的名义》一共有52集,上哪里可以一下子把52集的URL全部找到呢?
答案就是:播放列表

八大队专属技能——高效的脚本_第6张图片
检查网页元素

可以看出,clearfix这一段代码中含有全部52集电视剧的URL

那么第二个问题来了
如何从这一大串的字符串中把我们需要的URL找出来
经过分析与尝试,我们可以发现该酷的每个视频的播放页面的URL是有特点的,其URL格式必定为"v.youku.com/v_show/id_[视频的唯一ID]=="只要确定了这个ID就行

这时候我们就要请出处理特征字符串的专家:正则表达式
根据需求写出正则表达式:(正则表达式规则网上教程还是挺多的)
v\.youku\.com/v_show/id_\w*==
通过在线测试,这是行得通的

八大队专属技能——高效的脚本_第7张图片

将以上内容用代码实现

得益于Python简单、易读、易写的特点,我觉得咱们八大队的人只要看看Python的语法和相关的函数说明就可以写出来,这里贴一下我的代码:

#! /usr/bin/env python3
import os
import re
print("you-get批量下载命令生成器 Ver:1.0")
srcFile = open(input("Select your sourcefile: "))
srcStr = srcFile.read()
srcFile.close()
pattern = re.compile('v\.youku\.com/v_show/id_\w+==')
match = pattern.findall(srcStr)
print('共检索出%d个视频链接。'%(len(match)))
print(match)
boolean = input('是否执行?(y/n)')
if (boolean == 'y' or boolean == 'Y'):
    for i in range(len(match)):
        print("开始下载第%d个视频..."%(i+1))
        os.system('you-get ' + match[i])
    print('下载完成。')
else:
    print('终止下载。')

re为Python中的正则表达式模块,open()为打开文件操作,re.findall()用来查找字符串中能匹配正则表达式的内容,返回一个list列表
os.system()用来模拟终端命令,也就是window下的命令行

这段短短不到20行代码的功能是,可从任何文本文件(txt、html等)中找出所有优酷的视频链接然后一个一个自动下载,开始运行后你就可以去睡一觉,然后醒来就会发现一部电视剧已经下好啦O(∩_∩)O

同样的,我们也可以通过修改代码的相关内容让它能够批量下载不同网站的视频,不同清晰度的视频,或者添加下载前显示信息功能等等


结语

当我第一次写脚本的时候,我内心其实是拒绝的,因为你不可能一下子叫我写我就能写出来,看别人写脚本的时候发现Duang,很酷,很炫,很简单,但是第一次写的时候你会发现,根本没有这么简单的脚本。
但是,当你多尝试,多锻炼自己,多去写一写脚本,你会越来越熟练,你写的脚本不仅能处理文字,甚至照片,视频,数据库,工作学习的效率也越来越高,这时候,你就可以自豪地说:没错,我们八大队的人就是这么牛×

八大队专属技能——高效的脚本_第8张图片

你可能感兴趣的:(八大队专属技能——高效的脚本)