注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

wget网站镜像大杀器  

2009-12-28 22:47:30|  分类: 系统管理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天老婆想下载某个网站的所有网页,然后离线看。我马上就想到了我经常用的wget,最简单的命令就是这样了:

wget -m http://www.example.com/

但是对于某些网页好像没用,下载了首页以后就没直接退出了,娘的,怎么没有迭代啊。用wget -d debug一下:发现有类似语句:

Not following http://www.example/a/ because robots.txt forbids it.

Decided NOT to load it.

原来是robots.txt协议要求的,我不是爬虫,就一次性下载一下,站长不会有意见吧?

对于这种君子协议,wget难道不能偶尔流氓一下?网上一搜,有了,加上这个选项-e robots=off:

wget -m -e robots=off http://www.example.com/

奇怪的是这个选项在wget的help文档中都没有看到,不过这里详细的文档中倒是有:http://www.gnu.org/software/wget/manual/wget.html#Robot-Exclusion。估计这个选项太过刚猛,杀伤力太大。官方文档中也有这些警告:If you know what you are doing and really really wish to turn off the robot exclusion, set the de>robotsde> variable to ‘off’ in your .wgetrc.

另外有些网站也会禁止wget之类agent下载,我们也可以伪装一下,下面是一个比较完美的镜像大杀器语句:

wget -m -e robots=off -U “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6″ “http://www.example.com/”


2009.12.29更新

针对下载下来的网站怎么查看呢?

我是这么解决的:

1、在本机使用一个http server来访问这些网页。我选了apache。每下一个网站,就建立一个虚拟主机,对应你下载的网站。为什么不直接静态访问呢?我知道大部分静态网站内下载下来是直接可以访问的,不需要 http server(这时最好不要用wget -m,用-r应该就可以了),但是如果有些链接是js跳转且跟域名相关的,就很难找到对应的网页了。

2、更改本地的host文件,把网站的域名改为127.0.0.1。当然这样有点麻烦,你要真正访问真实的网站时,需要重新改回来。

3、当然下载的网站都是静态的,所有在服务端处理的脚本都是不能运行的,这是最大的缺点。


2009.12.30更新

昨天又碰到两个问题:

1、注意哪些带参数的超链接在使用wget的时候要用引号引起来,不然wget会认为是两个链接。

2、我碰到另外一个问题是在Windows下面,文件名是不能包含问号的,wget下载下来会保存以@代替,这时页面中的链接地址就不能链到具体文件了。我想到的解决办法是:

 1)使用sed之类的程序将文件中所有的链接地址中的?替换为@

 2)使用apache2.2.7+的mod_substitute模块实时替换原有的内容。我是选用了这种方法,因为这基本上是一种一劳永逸的方法,不用每次新下载网页都要替换,当然效率会比第一种方法差很多。

  评论这张
 
阅读(2164)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017