天天看点

扒站wget仿站wget 下载整个网站(扒站)及如何避开 robots.txt 限制下载防止Wget下载整站关于wget使用的一个有趣玩法

wget -c -r -p -np -k http://xxx.com/xxx      

其中:

-c, --continue (断点续传) 接着下载没下载完的文件

-r, --recursive(递归) specify recursive download.(指定递归下载)

-p, --page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)

-np, --no-parent(不追溯至父级) don't ascend to the parent directory.

-k, --convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)

wget -r -p -k -np [网址]

参数说明:

-r : 递归下载

-p : 下载所有用于显示 HTML 页面的图片之类的元素

-k : 在转换文件 X 前先将它备份为 X.orig。

-np: 不追溯至父目录

$ wget -r -np -nd http://example.com/packages/

这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件。其中,-np 的作用是不遍历父目录,-nd 表示不在本机重新创建目录结构。

$ wget -m -k (-H) http://www.example.com/

该命令可用来镜像一个网站,wget 将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。

$ wget -r -np -nd –accept=iso http://example.com/centos-5/i386/

与上一条命令相似,但多加了一个 –accept=iso 选项,这指示 wget 仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。

$ wget -i filename.txt

此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 wget 就会自动为你下载所有文件了。

$ wget -c http://example.com/really-big-file.iso

这里所指定的 -c 选项的作用为断点续传。

$ wget -m -k (-H) http://www.example.com/

该命令可用来镜像一个网站,wget 将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷)。

最后一条就是用来镜像一个网站的,简单有效,速度超快,镜像下来网站文件结构,代码都完整无须修改。

wget 下载整个网站(扒站)及如何避开 robots.txt 限制下载

脚本如下:

#!/usr/bin/env bash

#脚本作用:网站下载
#使用方式:执行脚本,后面跟网站的URL,需要带 http://xxxx.xxxx.com/

set -e

#定义站点克隆路径:
WEBDIR='/data/wwwroot'

#确定系统有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确认下载目录:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用断点续传的方式下载网站
wget -nc -r -p -k -np -P ${WEBDIR}/ $1

# -nc 断点续传
# -r, --recursive(递归) specify recursive download.(指定递归下载)
# -k, --convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)
# -p, --page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)
# -np, --no-parent(不追溯至父级) don't ascend to the parent directory.
#另外 日志 用-o参数
           

或者使用:

#!/usr/bin/env bash

#脚本作用:网站下载
#使用方式:执行脚本,后面跟网站的URL,需要带 http://xxxx.xxxx.com/

set -e

#定义站点克隆路径:
WEBDIR='/data/wwwroot'

#确定系统有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确认下载目录:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用断点续传 的方式下载网站
wget -nc -m -p -k -P ${WEBDIR}/ $1


# -nc 断点续传
# -m or --mirror开户镜像下载
# -p下载所有为了html页面显示正常的文件
# -k or --convert-links下载后,转换成本地的链接
# -P ./LOCAL保存所有文件和目录到本地指定目录
           

如果有些站点禁止了SEO 收录,那么有可能下载的只能下载一个robots.txt 文件,此时,我们可以使用 -e 参数,即脚本:

#!/usr/bin/env bash

#脚本作用:网站下载
#使用方式:执行脚本,后面跟网站的URL,需要带 http://xxxx.xxxx.com/

set -e

#定义站点克隆路径:
WEBDIR='/data/wwwroot'

#确定系统有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确认下载目录:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用断点续传及避开robots.txt 的方式下载网站
wget -e robots=off -nc -m -p -k -P ${WEBDIR}/ $1


# -nc 断点续传
# -m or --mirror开户镜像下载
# -p下载所有为了html页面显示正常的文件
# -k or --convert-links下载后,转换成本地的链接
# -P ./LOCAL保存所有文件和目录到本地指定目录
           

有些网站限制了WGET 访问,此时我们可以使用参数 -U ,即使用 –user-agent=AGENT 使用 AGENT 取代 Wget/VERSION 作为识别代号:

[[email protected] ~/wwwroot 09:56:15]#wget -e robots=off -nc -m -p -k -U "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER" -P ./ www.gcbet8.com
           

防止Wget下载整站

找到你站点的Nginx配置文件地址(使用yum,apt-get安装的Nginx,通常会在/etc/nginx/conf/ 或 /usr/local/nginx/conf/)

添加以下配置:

server {
    listen 80;
    server_name 你的域名.com www.你的域名.com;
    rewrite ^(.*)$ http://你的域名.com$1permanent;
    location / {
    if ($http_user_agent ~* (wget|ab) ) {
    return 403;
    }
    if ($http_user_agent ~* LWP :: Simple|Wget) {
    return 403;
    }
}
}      

亦可设置成 return 444;   这样对方不会收到403错误信息,只会像网站缓慢无法链接.

保存并重启Nginx

编辑完保存后,执行

service nginx restart    重启Nginx      

至此,Nginx配置防扒完成。

关于wget使用的一个有趣玩法

很多人玩linux差不都会用wget来下载一些文件来配置或者安装软件,当然也有人会用它来递归下载的你的网站内容,下面介绍一下如何配置Nginx实现防止别人通过wget下载你的网站内容和如何破解因为Nginx或Apache设置禁止wget或curl。

防止Wget递归下载

假设Nginx默认配置文件所在目录:

/usr/local/nginx/conf/vhost

wget的默认User Agent是GNU/Linux,wget,因此我们只需要阻止该UA的访问并返回403即可。

Nginx配置如下:

if ($http_user_agent ~* (Wget|ab) ) {
   return 403;
}
 
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
            return 403;
}
           

扩展:

Nginx中有一个独特的HTTP 444状态,如果配置return 444,那么对方就不会收到错误信息,看起来就像是网站服务器打开缓慢导致无法连接一样。

破解禁止wget或curl下载

某些网站设置了网站服务器或者iptables的参数禁止wget/curl的访问,让我们不能愉快地扒站了怎么办?其实大部分只是禁止了wget/curl的User Agent,我们只需要给他们设置一个正常的浏览器UA即可。

临时变更wget的UA

在wget前加上参数 

-U

,代表设置User Aagent

wget www.google.com -U ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101
           

永久变更Wget的UA

添加以下代码到/etc/wgetrc

header = User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
           

变更curl的UA

使用以下参数:

curl www.google.com --user-agent "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
           

同时,curl也可以传递refer信息来跳过某些防盗链设置:

curl -e http://www.google.com http://www.linpx.com
           

这代表从Google跳转到我们的网站.

Ok,就这样···