使用 Wget 创建网站的完整本地副本

使用 Wget 创建网站的完整本地副本

好的,这就是我需要的:

  • 我在 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文件和图像等似乎没有被下载 - 至少,直到我离开运行的级别(好吧,如果该过程完成,也许它们会被下载,所以我们可以跳过这一个)

  1. 当您说 时--domains wikispaces.com,您将不会下载位于其他域上的链接 CSS 文件。该网站上的某些样式表位于 ,这http://c1.wikicdn.com表明 的来源index.html

  2. 有些网站不允许您直接使用其链接访问其链接文件(引用的图像)(请参阅这一页)。您只能通过网站查看它们。不过这里似乎不是这样。

  3. 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.
    

    在浏览器中打开链接会将您带到登录页面。文件的名称表明它出现在评论中的某个地方。

  4. 许多网站不允许使用下载管理器下载,因此他们会检查哪个客户端发起了 HTTP 请求(包括浏览器,或您用来从其服务器请求文件的任何客户端)。

    用于-U somebrowser伪造客户端并假装是浏览器。例如,-U mozilla可以添加以告诉服务器 Mozilla/Firefox 正在请求该页面。然而,这不是这里的问题,因为我可以在没有此参数的情况下下载该网站。

  5. 下载和请求速率很重要。服务器不希望其性能因机器人从其站点请求数据而膨胀。在 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。

相关内容