刮整个网站

Dal*_*ser 43 html web-scraping

我正在寻找一个程序来提取和下载整个公司网站的建议.

该网站由一个已经停止工作的CMS提供支持并且修复它是昂贵的,我们能够重新开发该网站.

因此,我想将整个网站视为简单的html/css/image内容,并根据需要对其进行细微更新,直到新网站出现.

任何推荐?

Abh*_*ogi 61

wget \
     --recursive \
     --no-clobber \
     --page-requisites \
     --html-extension \
     --convert-links \
     --restrict-file-names=windows \
     --domains website.org \
     --no-parent \
         www.website.com
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多相关信息.

  • `-domains`应该与要删除的站点名称具有相同的参数(在本例中为`website.com`,而不是`.org`)? (5认同)
  • wget 不喜欢同时使用 `convert-links` 和 `no-clobber`。在这种情况下,它将忽略“no-clobber”。 (2认同)
  • 如果您想抓取带有 HTML5 标签(例如音频或视频)的网站,则必须使用最新版本的 wget。对这些的支持是在 2012-2013 年的某个时候添加的。我刚刚从他们的 Git 存储库中编译了最新版本,它得到了我需要的网站,以及完整的视频文件。 (2认同)

Tyl*_*nis 33

以上都没有得到我所需要的(整个网站和所有资产).这虽然有效.

首先,按照教程获取OSX上的wget.

然后运行它

wget --recursive --html-extension --page-requisites --convert-links http://website.com
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想要来自网址及其子域,请添加--no-parent (2认同)

T0n*_*rdi 27

我知道这是超级老,我只想把我的2美分.

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那么您可能需要/想要这个.我打开它只是为了安全起见 - 否则至少有1个链接会导致问题.

-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#switch.5通常非常安全.大多数时候,即使1也可能是好的.但要用点东西.


p.c*_*ell 26

考虑HTTrack.它是一个免费且易于使用的离线浏览器实用程序.

它允许您从Internet下载万维网站点到本地目录,递归构建所有目录,从服务器获取HTML,图像和其他文件到您的计算机.