有时我想存档一个站点。也许这是重要的事情,或者网站可能要下线了。我经常努力编造正确的 Wget 命令,所以我把它记录在这里以供将来参考。
wget --adjust-extension \ --convert-links \ --mirror \ --no-parent \ --page-requisites \ --restrict-file-names = windows \ --trust-server-names \ "https://example.com/tutorials"
那是基本命令。如果你想包含所有第三方依赖项,你可能还需要--span-hosts
;如果你想包含来自某些域的资产,你可能还需要--domains = cdn.example.com
。
标志说明
--adjust-extension
这可确保某些文件类型以通用扩展名结尾。例如带有.html
的 HTML 带有.css
的 CSS 和类似的。不幸的是,这并没有调整所有下载的文件,但提供了一些改进。使用通用扩展有助于从通用 Web 服务器提供内容,这些服务器将根据扩展设置Content-Type
标头。
--convert-links
将内容中的链接更新为相关链接。例如,如果页面包含<a href= https://example.com/foo >
将被转换为<a href= foo >
以便在浏览存档时按预期工作。它还会将尚未存档的链接转换为绝对链接,以便它们继续工作。
--mirror
这会打开一些推荐用于镜像的选项。有关详细信息,请参见手册页。
--no-parent
防止对根 URL“之上”的顶级页面进行归档。例如,如果归档https://example.com/music
链接到https://other.example
将不会被跟踪,并且到/work
的链接将不会被跟踪。请注意,这不会阻止归档页面要求。因此,如果https://example.com/music/player
加载/js/music-player.js
,即使该文件位于根目录之上,该文件仍将被下载。
--page-requisites
下载显示页面所需的文件。例如图像、JavaScript 和 CSS。请注意,Wget 不执行 JavaScript,因此不会找到动态加载的资源。
--restrict-file-names
默认情况下,Wget 会将文件保存到任何 URL 路径。这不适用于所有网络服务器。除了文件名限制外,许多人在请求文件之前会去掉一个查询字符串,例如?v=123
。这意味着如果 Wget 保存example.css?v=123
它将实际上无法访问。
我使用windows
是因为它是内置的并且似乎涵盖了最重要的情况。
--trust-server-names
此标志更改 Wget 在遇到重定向时命名文件的方式。默认情况下,它根据初始 URL 进行保存,这使其根据最终 URL 进行保存。这很有用,因为 Wget 如何处理在解析任何重定向后以相同 URL 结束的多个 URL。默认情况下,它会选择一个随机的初始 URL 并重写指向该 URL 的所有链接,这可能会导致出现奇怪的 URL。例如 WordPress 站点有指向/index.html?p=985
的链接,该链接重定向到常规帖子 URL。通常 Wget 最终会选择其中之一并重写所有链接以指向它,这很不雅观。
其他选项
我不知道任何其他用于全站点存档的简单选项。一种有趣的方法是使用AssetGraph之类的东西来获取站点。它有一个更强大的分析引擎(包括解析脚本),可以捕获更多动态 URL 引用,以及一个可编写脚本的类似 AST 的引用,可以更好地清理网站(例如合并具有不同参数但相同内容的 URL) .