前言
最近要下载一个在youtube上的数据库,用来训练神经网络。走国内通道下载比较慢。于是,我使用了vps代理方式下载,速度取决于你的机器连接vps的网速。本文的主要内容有,实现shadowsocks 代理 ,tsocks 代理工具使用,可组合使用的一些下载工具如wget 和axel等。
# 举个栗子
$ tsocks wget -c https://www.dropbox.com/s/minpyv59crdifk9/datasets.zip
嗯嗯,这个速度还不错!

声明:本文以科学研究为目的,请勿滥用。
1 Shadowsocks
Shadowsocks是一个轻量级socks5代理工具。在linux平台,我们可使用 python 提供的包管理工具 pip 安装 Shadowsocks ,如下。
# pip 安装 Shadowsocks
$ pip install shadowsocks
# 或者
$ pip install git+https://github.com/shadowsocks/shadowsocks.git@master
pip安装完之后,可能要重启终端,我们就有ssserver和sslocal小工具了。下面配置server或者client。一般,server配置在国外的vps上,client配置在本地国内机器上。
PS:其他平台安装 参考 shadowsocks官方 install
1.1 配置 Shadowsocks server
按下面的三步走,即可。
通过ssh连接到(Virtual Private Server)vps上,或者本地打开终端。
新建一个server_shadowsocks.json文件,内容如下:
{
"server":"0.0.0.0",
"server_port":443,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"密码",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}
- 执行
ssserver -c server_shadowsocks.json
说一点: 由于我们的下载任务是临时的,开个screen(终端复用工具)放在后台。当然你也可以设置为开机自启动,这里不再赘述。
1.2 配置 Shadowsocks client
通过ssh连接到机器上,或者本地打开终端。
新建文件 client_shadowsocks.json
{
"server":"服务器ip或域名",
"server_port":443,
"local_address":"127.0.0.1",
"local_port":1280,
"password":"密码",
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false,
"workers":1
}
- 执行
sslocal -c client_shadowsocks.json。
说一点:推荐使用screen方式放在后台。当然也可以使用-d 参数放在后台运行。
sslocal -c client_shadowsocks.json -d start
2 tsocks
有些linux工具可能没有proxy的代理功能,或者不支持sock5代理,而用tsocks可以很好的解决这些问题。tsocks 是个终端代理工具,可以直接连接shadowsocks提供socks 5代理端口,有点类似于proxychains。
下面简单介绍下安装与使用:
- 安装tsocks
- linux安装tsocks 命令:
apt install tsocks - mac 安装参考 homebrew-tsocks
- linux安装tsocks 命令:
- 开启上面Shadowsocks的client放在后台。
- 修改tsocks 配置文件,在
/etc/tsocks.conf文件的最后添加:
local = 192.168.1.0/255.255.255.0
server = 127.0.0.1
server_type = 5
server_port = 1080
3 Demo:代理使用
3.1 使用 tsocks
在所需代理的命令前加个tsocks就行,如:
tsocks wget -c xxxx,tsocks axel -n 10 -av xxxx,tsocks curl xxx
3.2 使用 youtube-dl
youtube-dl是批量下载youtube视频的好工具。youtube-dl 可以指定 proxy,可以不使用tsocks。
- 安装youtube-dl
pip install --upgrade youtube-dl
使用举个例子
- 下载youtube视频
URL=https://www.youtube.com/playlist?list=PLLbeS1kM6teJqdFzw1ICHfa4a1y0hg8Ax ./youtube-dl --proxy socks5://127.0.0.1:1280 ${URL} # 在 client_shadowsocks.json 的 local_port 设置为1280,这儿也为1280- 下载里面的mp3
youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=xpVfcZ0ZcFM
youtube-dl 中待解决的问题? 想只下载一个视频中的一部分,不用下载整个视频,太费vps流量了。暂未找到解决办法,我找到的一个跟问题很相似的issue,有朋友会整的,望告诉一下。is it possible to download only desired time interval?
3.3 使用 axel
axel多线程下载。
tsocks axel -n 3 -a https://www.dropbox.com/s/minpyv59crdifk9/datasets.zip
-n 3 : 3个线程下载
-a : 有个进度条
其他方式:下载脚本 axel-bash.sh
#!/bin/sh -e
# usage: ./axel-batch.sh the-download-url.list
cat $1 | while read LINE
do
if [ -n "$LINE" ]; then
axel -n 3 -a `echo $LINE`
fi
done