wget \
--recursive \
--no-clobber \
--page-requisites \
--html-extension \
--convert-links \
--restrict-file-names=windows \
--domains www.website.com \
--no-parent \
www.website.com
在这里阅读更多相关内容。
--domains
参数是否应与要抓取的站点名称(在本例中为website.com
,而不是.org
)相同? - user151841--wait=5
参数,就像其他答案一样。在爬取数据时要考虑周全! - ximo我知道这个命令已经非常老了,但我想提供我的意见。
wget -m -k -K -E -l 7 -t 6 -w 5 http://www.website.com
以下是每个开关的一些解释:
-m
实际上,这意味着“镜像站点”,它通过站点蜘蛛爬行递归地抓取页面和图片。它会检查时间戳,因此如果您第二次使用此开关运行 wget,则只会更新新于上次的文件/页面。
-k
这将修改 html 中的链接以指向本地文件。如果您在整个网站中使用类似于 page2.html
的东西作为链接,而实际上您正在使用完整的 http://www.website.com/page2.html
,您可能需要或想要这个。我打开它只是为了安全起见——否则至少有一个链接可能会导致问题。
-K
上面的选项(小写 k)编辑 html。如果您也想要“未更改”的版本,请使用此开关,它将保存更改后的版本和原始版本。如果出现问题并且您想比较两个版本,这是一个好习惯。您随时可以稍后删除不想要的那个版本。
-E
这将使用“正确的扩展名”保存 HTML 和 CSS。小心使用此选项——如果您的网站上并没有每个页面都有 .html 扩展名,那么它会添加它。但是,如果您的网站已经使用了像“htm”之类的文件命名,则现在将以“.htm.html”的形式结束。
-l 7
默认情况下,我们上面使用的 -m 会递归/蜘蛛爬行整个站点。通常来说这没问题。但有时您的网站会有一个无限循环,在这种情况下,wget 将永远下载。想象一下典型的 website.com/products/jellybeans/sort-by-/name/price/name/price/name/price
示例。现在这种情况比较少见——大多数网站表现良好,不会这样做,但为了安全起见,请确定从主页到达任何真实页面可能需要的最多点击次数,稍微增加一些(如果您设置了值为 7 并在一小时后发现您的网站深度为 8 级,那将很糟糕!)并使用该数字。当然,如果您知道您的网站具有良好的结构,没有必要包括此选项,并且可以放心地知道您的网站上的隐藏页面的层数为 50 级。
-t 6
如果尝试访问/下载某个页面或文件失败,则设置在放弃该文件并继续进行之前的重试次数。通常希望它最终放弃(如果您想无限尝试,请将其设置为0),但是如果网站只是短暂地出现问题,也不希望它放弃。我认为6次是合理的。
-w 5
这告诉wget在抓取下一个文件之前等待几秒钟(在本例中为5秒)。在这里使用某些东西(至少1秒)通常非常关键。让我解释一下。默认情况下,wget会尽可能快地获取页面。这很容易成为每秒多个请求,这有可能对服务器造成巨大负载(特别是如果网站使用PHP编写,在每个请求上进行MySQL访问,并且不使用缓存)。如果网站在共享主机上,该负载可能会使某人被踢出他们的主机。即使在VPS上,它也可能使一些网站屈服。即使该网站本身幸存下来,接收到大量请求可能会看起来像DOS攻击,这很可能会导致IP自动阻止。如果您不能确定该网站能否处理大量的流量,请使用-w #开关。5通常是相当安全的。甚至1大多数情况下也可以。但一定要使用某些东西。
以上所有方法都没有完全满足我的需求(需要整个网站和所有资产)。但是这个方法可行。
首先,按照此教程在OSX上安装wget。
然后运行以下命令:
wget --recursive --html-extension --page-requisites --convert-links http://website.com
考虑使用HTTrack。它是一个免费且易于使用的离线浏览器实用程序。
它允许你将整个网站从互联网下载到本地目录,递归创建所有目录,获取服务器上的HTML、图片和其他文件并保存到你的计算机上。
最好的方法是使用wget
进行爬取,正如@Abhijeet Rastogi的答案所建议的那样。 如果您不熟悉它,则Blackwidow是一个不错的爬虫。 我以前用过它。 http://www.sbl.net/