如何只镜像网站的一部分?

52

我无法使用wget来镜像网站的一个部分(根路径下的文件夹路径)- 它似乎只能从网站首页起作用。

我尝试了许多选项 - 这里是一个示例

wget -rkp -l3 -np  http://somewebsite/subpath/down/here/

虽然我只想镜像下面链接的内容,但我还需要下载不在此路径中的所有页面资源。

对于主页(/),它似乎工作正常,但我无法将其应用到任何子文件夹中。

5个回答

89

使用 --mirror (-m) 和 --no-parent (-np) 选项,再加上一些酷炫的选项,就像这个例子中一样:

wget --mirror --page-requisites --adjust-extension --no-parent --convert-links
     --directory-prefix=sousers http://stackoverflow.com/users

25
为了帮助其他人节省查找wget手册的时间,-p代表--page-requisites,-P代表--directory-prefix。 - Alf Eaton
4
如果其他人遇到同样的问题,在这里提一下,Windows 7最常下载的wget二进制文件似乎是来自sourceforge.net的gnuwin32包,但这些只是wget-1.11版本,没有--adjust-extension功能。而该功能似乎仅在wget-1.12中添加。因此,Windows 7用户可以从这里获取更新且独立的二进制文件(http://eternallybored.org/misc/wget/)。 - bdutta74

19

我通常使用:

wget -m -np -p $url

2
使用-p选项下载显示页面所需的所有内容非常有用。这是否覆盖了仅下载显示页面所需元素的-np选项呢? - Geremia
仅供参考:-m表示镜像,-np表示无父级(在递归时不检索更高层次的文件),-p表示页面必需品或所有必要的项目以适当地显示网页。 - Shrout1

3

我使用pavuk来完成镜像,因为从一开始它似乎更适合这个目的。您可以使用类似以下的东西:

/usr/bin/pavuk -enable_js -fnrules F '*.php?*' '%o.php' -tr_str_str '?' '_questionmark_' \
               -norobots -dont_limit_inlines -dont_leave_dir \
               http://www.example.com/some_directory/ >OUT 2>ERR

2
对于我的用例,不父选项并不完全适用。我试图镜像https://www.example.com/section和其下的URL,如https://www.example.com/section/subsection。这不能通过--no-parent完成,因为如果你从/section开始,那么它会下载整个站点,如果你从/section/开始,那么站点将重定向到/section,现在它在父级,所以wget停止了。相反,我使用--acept-regex 'https://www.example.com/(section|assets/).*'。这起作用了。(虽然它会下载sectionfoobar,但这对我来说是可以接受的,现在我们正在漫游到其他地方涵盖在SO中的regexp领域。)

0

请查看archivebox.io,它是一个开源的、自托管的工具,可以创建本地的、静态的、可浏览的网站HTML克隆(它保存HTML、JS、媒体文件、PDF、截图、静态资源等)。

默认情况下,它只存档您指定的URL,但我们很快将添加一个--depth=n标志,让您递归地存档给定URL中的链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接