步行者

自由主义者

Archive for 十二月, 2009

wget网站镜像大杀器

今天老婆想下载某个网站的所有网页,然后离线看。我马上就想到了我经常用的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模块实时替换原有的内容。我是选用了这种方法,因为这基本上是一种一劳永逸的方法,不用每次新下载网页都要替换,当然效率会比第一种方法差很多。

2009.12.31更新

经过一晚上的测试,发现无论是apache的mod_substitute模块和mod_rewrite都不是很好用,可能是用得不熟的缘故吧。

不过我发现了wget一个比较有用的参数:-k,也即wget下载完成以后把html文档中所有的连接换成真实的相对连接,这样不用我们手工替换了。

新浪微博

http://t.sina.com.cn/yaoweibin

不用翻墙,适合一般人,用用还行

编译并尝试chromiumos

鉴于大家情绪都比较低落,发几篇技术博客来冲喜。

1、经过1天多的编译,终于在我的虚拟机上成功编译了chromiumos,基本方法参考这里:http://blog.csdn.net/rhenry31/archive/2009/12/01/4915172.aspx

2、然后将编译成功的虚拟镜像在Virtual Box上跑了一下,能用,但是功能单薄了些,就是纯粹一个浏览器,连终端都没有,感觉现在没啥用处。
chromeos
ps:淘宝上买的尤尼克斯羽毛拍到货了,花了100多米,感觉不错,拍面较硬,适合进攻,鸟枪换炮了,哈哈。谁喜欢打羽毛球的叫上我啊。