好的,这就是我需要的:
- 我在 Mac 上(Mac OS X 10.6.8)
- 我想在我的硬盘上完全镜像一个网站(这是我用来测试的东西)
- 我希望所有图片和先决条件都在那里,这样网站在离线时也可以浏览
- 我希望所有页面中的相关链接都相应更新
- (* 可选)
.html
所有文件的扩展名都很好,这样浏览器就可以轻松识别和打开它们
这就是我正在使用的:
wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/
事情是 :
.css
文件和图像等似乎没有被下载 - 至少,在我一直运行的级别上(好吧,也许他们会如果该过程已完成,则无需下载,因此我们可能会跳过此步骤)- 未添加任何 html 扩展
- 链接未转换
那么...有什么想法吗?
答案1
首先,这似乎是 OS X 独有的问题。我可以在 Ubuntu 14.04 LTS 上使用上述命令,而且它开箱即用!以下是一些建议:
.css
文件和图像等似乎没有被下载 - 至少,直到我离开运行的级别(好吧,如果该过程完成,也许它们会被下载,所以我们可以跳过这一个)
当您说 时
--domains wikispaces.com
,您将不会下载位于其他域上的链接 CSS 文件。该网站上的某些样式表位于 ,这http://c1.wikicdn.com
表明 的来源index.html
。有些网站不允许您直接使用其链接访问其链接文件(引用的图像)(请参阅这一页)。您只能通过网站查看它们。不过这里似乎不是这样。
Wget 在解析 HTML 时似乎无法识别注释。Wget 运行时我看到以下内容:
--2016-07-01 04:01:12-- http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg Reusing existing connection to chessprogramming.wikispaces.com:80. HTTP request sent, awaiting response... 404 Not Found 2016-07-01 04:01:14 ERROR 404: Not Found.
在浏览器中打开链接会将您带到登录页面。文件的名称表明它出现在评论中的某个地方。
许多网站不允许使用下载管理器下载,因此他们会检查哪个客户端发起了 HTTP 请求(包括浏览器,或您用来从其服务器请求文件的任何客户端)。
用于
-U somebrowser
伪造客户端并假装是浏览器。例如,-U mozilla
可以添加以告诉服务器 Mozilla/Firefox 正在请求该页面。然而,这不是这里的问题,因为我可以在没有此参数的情况下下载该网站。下载和请求速率很重要。服务器不希望其性能因机器人从其站点请求数据而膨胀。在 Wget 中使用
--limit-rate=
和--wait=
参数来限制下载速率,并在生成单个文件的 get 请求之间等待几秒钟。例如
wget -r --wait=5 --limit-rate=100K <other arguments>
在两次获取请求之间等待 5 秒,并将下载速率限制为 100Kbps。再次强调,这不是这里的问题,因为服务器没有要求我限制下载速率来获取网站。
这里最可能的情况是 (1)。将 替换--domains wikispaces.com
为--domains *
并重试。让我们看看我们能得到什么。您至少应该能够获取 CSS 文件。
未添加任何 html 扩展
当我运行命令时,HTML 扩展被添加。
链接未转换
我不认为我在这里完全正确,但是当你镜像一个站点时,不要指望链接能够开箱即用。
当您将参数传递给 HTTP get 请求(例如http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0
具有参数v=rss_2_0
)时,请求将由服务器上运行的某些脚本处理,例如 PHP。这些参数将帮助您根据参数获取脚本的正确版本。请记住,当您镜像一个在 PHP 上运行的站点(特别是 Wiki)时,您不能完全镜子除非您获取原始 PHP 脚本,否则无法访问网站。PHP 脚本返回的 HTML 页面只是使用该脚本可以查看的页面的一个方面。正确的算法生成页面存储在服务器上,只有获取原始 PHP 文件时才会正确镜像,而使用 HTTP 则无法做到这一点。为此,您需要对服务器进行 FTP 访问。
希望这可以帮助。
答案2
选项 1 来自user612013 的回答对我来说肯定是问题所在。事实上,它出错是因为我请求了https://censoreddomain.com
而不是https://www.censoreddomain.com
(注意www.
)。一旦我添加了www.
,wget
它就会为我抓取整个网站。因此,重要的是与您要抓取的域名的规范名称完全匹配。
由于错误是我的,所以我认为这个“陷阱”适用于wget
所有平台,而不仅仅是 OS X。