Wget for windows——优雅地实现批量下载

提到批量下载,更多的人第一个想到的是迅雷——可惜纵然推出了轻量版,迅雷仍然属于不可忍受的广告类软件之一。那么,来尝试下wget for windows吧。

GNU Wget for windows

项目主页:Windows binaries of GNU Wget

镜像:Wget for Windows

GNU Wget(常常简称为wget)是一个网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分。 它的名字是“World Wide Web”和“Get”的结合,同时也隐含了软件的主要功能。 目前它支持HTTP、HTTPS以及FTP这三个常见的TCP/IP协议下载。

Wget是一个非交互式命令行工具,所有二进制文件都是静态编译的,这意味着wget.exe不需要任何其他文件即可工作。

它的主要特点包括:

  • 支持递归下载
  • 恰当地转换页面中的连接
  • 生成可在本地浏览的页面镜像
  • 支持代理服务器

在1996年,随着互联网的爆发,Wget出现了。Wget被广泛的使用到了Unix和Linux的发行版本中。 它是由C语言来写的,因此具有良好的移植能力,因此也可在Windows上运行。

安装

项目主页中提供了两种安装包(.exe 应用程序安装与.zip压缩包安装),此处仅介绍ZIP压缩包安装方式。下载适合版本的ZIP格式程序文件后,解压到本地文件夹,如:“D:\Program Files\wget”。

打开『系统属性』,点击『高级系统设置』,然后参照下图配置好环境变量。

运行cmd,输入命令wget -V,成功显示当前安装版本信息表示安装成功。

基本命令格式:

wget [option] [URL]

[--option]

  • -o, –output-file=FILE 把记录写到FILE文件中
  • -a, –append-output=FILE 把记录追加到FILE文件中
  • -i, –input-file=FILE 下载在FILE文件中出现的URLs
  • -F, –force-html 把输入文件当作HTML格式文件对待
  • -B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
  • -V, –version 显示wget的版本后退出
  • -h, –help 打印语法帮助
  • -b, –background 启动后转入后台执行
  • -e, –execute=COMMAND 执行“.wgetrc”格式的命令,.wgettrc命令其实是一个参数列表,直接将软件需要的参数写在一起就可以了。

注:每一个参数有长短两种表示方法,功能一样,任何一个都可以使用。

1、启动类参数

这一类参数主要提供软件的一些基本信息;

-V,–version 显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个“.wgetrc”命令

需要注意的是,这里的-e参数是执行一个.wgettrc的命令,.wgettrc命令其实是一个参数列表,直接将软件需要的参数写在一起就可以了。

2、文件处理参数

这类参数定义软件log文件的输出方式等;

-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;

以上参数对于攻击者比较有用,我们来看看具体使用;

例1:下载192.168.1.168首页并且显示下载信息

wget -d http://192.168.1.168

例2:下载192.168.1.168首页并且不显示任何信息

wget -q http://192.168.1.168

例3:下载filelist.txt中所包含的链接的所有文件

wget -i filelist.txt

3、下载参数

下载参数定义下载重复次数、保存文件名等;

-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O --output-document=FILE下载文件保存为别的文件名
-nc, --no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理

例:下载192.168.1.168的首页并将下载过程中的的输入信息保存到test.htm文件中

wget -o test.htm http://192.168.1.168

4、目录参数

目录参数主要设置下载文件保存目录与原来文件(服务器文件)的目录对应关系;

-nd --no-directories 不建立目录
-x,–force-directories 强制建立目录

可能现在我们对这里的目录还不是很了解,我们来看一个举例

例:下载192.168.1.168的首页,并且保持网站结构

wget -x http://192.168.1.168

5、HTTP参数

HTTP参数设置一些与HTTP下载有关的属性;

–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码

以上参数主要设置HTTP和代理的用户、密码;

6、递归参数设置

在下载一个网站或者网站的一个目录的时候,我们需要知道的下载的层次,这些参数就可以设置;

-r,–recursive 下载整个网站、目录(小心使用)
-l,–level=NUMBER 下载层次

例:下载整个网站

wget -r http://192.168.1.168

7、递归允许与拒绝选项参数

下载一个网站的时候,为了尽量快,有些文件可以选择下载,比如图片和声音,在这里可以设置;

-A,–accept=LIST 可以接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST可以接受的域名
–exclude-domains=LIST拒绝的域名
-L,–relative 下载关联链接
–follow-ftp 只下载FTP链接
-H,–span-hosts 可以下载外面的主机
-I,–include-directories=LIST允许的目录
-X,–exclude-directories=LIST 拒绝的目录

如何设定wget所使用的代理服务器

wget可以使用用户设置文件".wgetrc"来读取很多设置,我们这里主要利用这个文件来设置代理服务器。使用者用什么用户登录,那么什么用户主目录下的".wgetrc"文件就起作用。例如,“root"用户如果想使用”.wgetrc"来设置代理服务器,"/root/.wgetrc"就起作用,下面给出一个".wgetrc"文件的内容,读者可以参照这个例子来编写自己的"wgetrc"文件:

http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080

这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:80。第一行指定HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。

使用示例

wget -np -m -l5 http://jpstone.bokee.com //不下载本站所链接的其它站点内容,5级目录结构

关于wget -P 目录 网址 用法:比如你要放到/root底下,你可以打下列的指令:

wget -P /root 网址
wget -P D:\xxx.zip http://www.xdown.com/xxx.zip
wget -P "D\xxx.zip" http://www.xdown.com/xxx.zip

经常要下载一个网站或网站的某个目录,例如下载网站www.example.com/目录mydir下的所有内容

命令如下:
wget -r -p -k -np -nc -e robots=off http://www.example.com/mydir/
如果要想下载整个网站,最好去除-np参数。
wget -r -p -k -nc -e robots=off http://www.example.com/mydir/

-r 递归;对于HTTP主机,wget首先下载URL指定的文件,然后(如果该文件是一个HTML文档的话)递归下载该文件所引用(超级连接)的所有文件(递 归深度由参数-l指定)。对FTP主机,该参数意味着要下载URL指定的目录中的所有文件,递归方法与HTTP主机类似。
-c 指定断点续传功能。实际上,wget默认具有断点续传功能,只有当你使用别的ftp工具下载了某一文件的一部分,并希望wget接着完成此工作的时候,才 需要指定此参数。

-nc 不下载已经存在的文件
-np 表示不追溯至父目录,不跟随链接,只下载指定目录及子目录里的东西;
-p 下载页面显示所需的所有文件。比如页面中包含了图片,但是图片并不在/yourdir目录中,而在/images目录下,有此参数,图片依然会被正常下载。

-k 修复下载文件中的绝对连接为相对连接,这样方便本地阅读。
-o down.log 记录日记到down.log
-e robots=off 忽略robots.txt

作者: Hugh

Welcome to Wan's world~