一、you-get介绍
在回看经典的无限挑战2015歌谣祭这一期后,准备从爱奇艺下载保存起来,但是发现爱奇艺流氓地要求下载客户端才能下载。所以拒绝这种方式,发现了一款基于python3的you-get视频下载工具。这是命令行程序,用于从Web下载媒体内容(视频,音频,图像)。例如YouTube,优酷,Bilibili,爱奇艺等等。大致原理:通过抓取URL视频资源的加密方式,然后根据解析器对网页请求进行相应的解析,然后从视频站服务器中获取下载地址出来。
二、安装
环境准备:
2.1、安装you-get
首先要在windows中装好python3环境。由于you-get的官方版本通过PyPI分发, 可从PyPI镜像中通过pip包管理器安装,所以使用pip命令方式安装:
C:\Users\ThinkPad\Desktop>pip3 install you-get
或者选择其他五种安装方式见官网。如果以前已经安装好了you-get,那么可以更新一下最新版本:
C:\Users\ThinkPad\Desktop>pip3 install --upgrade you-get
2.2、安装FFmpeg
通过官网下载压缩包解压到本地,并将bin目录添加到系统环境变量即可。如下图所示:
三、下载使用
首先可以使用 --info
/-i
以查看所有可用画质与格式。并且标有DEFAULT的为默认画质,默认选项为最高画质,并且默认下载为当前用户路径,如不希望you-get合并视频,使用 --no-merge/-n
:
C:\Users\ThinkPad\Desktop>you-get -i https://www.iqiyi.com/v_19rro67g8w.html
结果如下所示,爱奇艺这个资源不能下载,查看官网资料发现个别网站还存在一些BUG,有些资源还不能下载:
官网展示的BUG如下所示:
于是更换无限挑战歌谣祭2015这一期在B站上的资源后,成功找到资源并且下载,这个资源它下载各个片段最后自动合并为一个完整视频:
C:\Users\ThinkPad\Desktop>you-get https://www.bilibili.com/video/av14784402/
you-get: This is a multipart video. (use --playlist to download all parts.)
site: Bilibili
title: 无限挑战2015歌谣祭(合集) (P1. 150704)
stream:
- format: flv720
container: flv
quality: 高清 720P
size: 1135.1 MiB (1190190184 bytes)
# download-with: you-get --format=flv720 [URL]
Downloading 无限挑战2015歌谣祭(合集) (P1. 150704).mp4 ...
100% (1135.1/1135.1MB) ├████████████████████████████████████┤[13/13] 5 MB/s
Merging video parts... Merged into 无限挑战2015歌谣祭(合集) (P1. 150704).mp4
Downloading 无限挑战2015歌谣祭(合集) (P1. 150704).cmt.xml ...
3.1、遇到问题更新2019-09-08
距离上次使用才过几天,刚刚使用you-get下载B站视频时发现失败了,debug显示HTTP Error with code403,而且下载前几天使用的同一资源也是这个报错。说明请求被服务器拒绝了,于是去you-get官网pull requests查看最新合并问题,发现刚好这几天B站禁止了这个常量user-agent,已经有人解决申请合并了,更改源码bilibili.py中固定的UA即可(现在就临时找到我本地python安装目录的python3.7.4\Lib\site-packages\you_get\extractors下的bilibili.py修改,以后该问题合并通过后,重新卸载掉you-get再安装最新修复版本就行了。其中,我在修改后运行报错为TabError: inconsistent use of tabs and spaces in indentation,查询发现是Tab和空格的缩进不一致问题,更改后就成功了!!),如下所示:
src/you_get/extractors/bilibili.py下:
1、增加import random
2、增删代码为:
# a reasonable UA
# bilibili has banned constant UA,so use random
# ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
browser_version=str(random.randint(60, 63))+'.0.'+str(random.randint(1239, 4239))+'.'+str(random.randint(10, 80))
OSversion=str(random.randint(8, 10))+'_'+str(random.randint(5, 10))+'_'+str(random.randint(5, 10))
webkitversion=str(random.randint(500, 537))+'.'+str(random.randint(30, 60))
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X '+OSversion+') AppleWebKit/'+webkitversion+' (KHTML, like Gecko) Chrome/'+browser_version+' Safari/'+webkitversion
# headers = {'Accept': '*/*', 'User-Agent': ua}
headers = {'User-Agent': ua}
四、you-get常用命令及说明
1、可以使用 Ctrl+C 来暂停当前的下载。
临时的 .download
文件将保存于输出目录。下次使用 you-get
传入相同参数时,下载将从上次继续开始。如果下载已经完成 (临时的 .download
扩展名消失), you-get
将忽略下载。
2、可以使用--force
/-f
进行强行重下载。(注意: 这将会覆盖同名文件或临时文件!)
3、可以使用 --output-dir
/-o
设置下载的路径,以及--output-filename
/-O
设置下载文件的名字:
C:\Users\ThinkPad>you-get -o Desktop -O IU https://www.bilibili.com/video/av14784402/
4、代理设置,可以通过you-get使用 --http-proxy
/-x
选项指定要使用的HTTP代理:
C:\Users\ThinkPad\Desktop>you-get -x 127.0.0.1:8087 https://www.youtube.com/watch?v=jNQXAC9IVRw
但是,http_proxy
默认情况下应用系统代理设置(即环境变量)。要禁用任何代理,请使用该 --no-proxy
选项。
注意
- If you need to use proxies a lot (in case your network is blocking certain sites), you might want to use
you-get
with proxychains and setalias you-get="proxychains -q you-get"
(in Bash). - For some websites (e.g. Youku), if you need access to some videos that are only available in mainland China, there is an option of using a specific proxy to extract video information from the site:
--extractor-proxy
/-y
.
五、you-get支持的网站
参考官网:https://github.com/soimort/you-get