我想镜像一个网站,这样我就可以在任何地方托管静态文件(localhost,S3等),这些网址就像最终用户一样。
这几乎完全符合我的需要(......但不完全):
wget --mirror -nH -np -p -k -E -e robots=off http://mysite
--mirror
:递归下载整个网站-p
:下载所有必要的页面必需品-k
:将网址转换为相对路径,以便我可以将它们托管在任何地方有些内容会被多次下载,从而产生myfile.html
和myfile.1.html
。这不会是坏事,除了当wget重写超链接时,它正在用myfile.1.html
版本编写它,这正在改变URL,因此有SEO考虑因素(谷歌将索引难看的URL)。
-nc
选项会阻止此操作,但从wget-v1.13开始,我无法同时使用-k
和-nc
。详细信息为here。
我希望使用wget,但我现在正在考虑使用其他工具,比如httrack,但我还没有任何经验。
有关如何实现这一目标的任何想法(使用wget,httrack或其他任何内容)将不胜感激!
答案 0 :(得分:1)
httrack
让我大部分时间都是这样做的,唯一的网址修改就是让链接指向/folder/index.html
而不是/folder/
。
使用httrack
或wget
似乎不会产生完美的网址结构,因此我们最终编写了一个运行抓取工具的小bash脚本,然后sed
进行清理部分网址(从链接裁剪index.html
,将bla.1.html
替换为bla.html
等)。
答案 1 :(得分:0)
根据这个(以及我自己的快速实验),你可以一起使用-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是一个新的命令,但到目前为止证明是非常宝贵的,我希望别人会有同样的感受。