镜像网站并维护URL结构

时间:2013-08-14 07:22:47

标签: wget mirroring

目标

我想镜像一个网站,这样我就可以在任何地方托管静态文件(localhost,S3等),这些网址就像最终用户一样。

命令

这几乎完全符合我的需要(......但不完全):

wget --mirror -nH -np -p -k -E -e robots=off http://mysite

这是做什么的

  • --mirror:递归下载整个网站
  • -p:下载所有必要的页面必需品
  • -k:将网址转换为相对路径,以便我可以将它们托管在任何地方

这不做什么

  • 防止重复下载
  • 维护(完全)相同的网址结构

问题

有些内容会被多次下载,从而产生myfile.htmlmyfile.1.html。这不会是坏事,除了当wget重写超链接时,它正在用myfile.1.html版本编写它,这正在改变URL,因此有SEO考虑因素(谷歌将索引难看的URL)。

-nc选项会阻止此操作,但从wget-v1.13开始,我无法同时使用-k-nc。详细信息为here

帮助?!

我希望使用wget,但我现在正在考虑使用其他工具,比如httrack,但我还没有任何经验。

有关如何实现这一目标的任何想法(使用wget,httrack或其他任何内容)将不胜感激!

2 个答案:

答案 0 :(得分:1)

httrack让我大部分时间都是这样做的,唯一的网址修改就是让链接指向/folder/index.html而不是/folder/

使用httrackwget似乎不会产生完美的网址结构,因此我们最终编写了一个运行抓取工具的小bash脚本,然后sed进行清理部分网址(从链接裁剪index.html,将bla.1.html替换为bla.html等)。

答案 1 :(得分:0)

wget description and help

根据这个(以及我自己的快速实验),你可以一起使用-nc和-k选项来收集你所追求的页面。

什么会导致问题是使用-N和-nc(根本不起作用,不兼容),所以你不能通过时间戳比较文件,但仍然没有删除它们,并且 - 镜像选项你包括-N本身。

而不是使用--mirror尝试将其替换为" -r -l inf"这将使递归下载达到无限级别,但仍允许其他选项工作。

一个例子,基于你原来的:

wget -r -l inf -k -nc -nH -p -E -e robots=off http://yoursite

注意:我建议使用-w 5 --random-wait --limit-rate = 200k以避免对服务器进行DOS操作并且不那么粗鲁,但显然由你决定。

一般来说,我试图避免使用像--mirror这样的选项分组,因为这样的冲突更难以跟踪。

我知道这是一个非常古老的问题的答案,但我认为应该解决这个问题 - 对我来说,wget是一个新的命令,但到目前为止证明是非常宝贵的,我希望别人会有同样的感受。