【问题标题】:Scrape An Entire Website [closed]刮掉整个网站[关闭]
【发布时间】:2012-03-05 03:06:25
【问题描述】:

我正在寻找有关抓取和下载整个公司网站的程序的建议。

该网站由已停止工作的 CMS 提供支持,修复它的成本很高,我们能够重新开发该网站。

所以我想将整个网站作为纯 html / css / 图片内容,并根据需要对其进行小幅更新,直到新网站出现。

有什么推荐吗?

【问题讨论】:

标签: html web-scraping


【解决方案1】:
wget \
     --recursive \
     --no-clobber \
     --page-requisites \
     --html-extension \
     --convert-links \
     --restrict-file-names=windows \
     --domains www.website.com \
     --no-parent \
         www.website.com

阅读更多相关信息here

【讨论】:

  • wget 不喜欢 convert-linksno-clobber 一起使用。在这种情况下,它将忽略no-clobber
  • 如果你想抓取带有 HTML5 标签的网站,例如音频或视频,你必须使用最新版本的 wget。在 2012-2013 年的某个时候增加了对这些的支持。我刚刚从他们的 Git 存储库中编译了最新版本,它得到了我需要的网站,并附有视频文件。
  • --domains 是否应该与要抓取的站点名称具有相同的参数(在这种情况下是 website.com,而不是 .org)?
  • @lightrush 你能提供一个版本号吗?
【解决方案2】:

我知道这太老了,我只想把我的 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 示例。现在有点少见了——大多数网站表现良好并且不会这样做,但为了安全起见,请计算出从主页到达任何真实页面所需的最多点击次数,pad一点点(如果您使用 7 的值并在一小时后发现您的站点有 8 层深度,那就太糟糕了!)并使用 #.当然,如果您知道您的网站具有可以正常运行的结构,那么忽略这一点并放心地知道您网站上 50 层深的 1 个隐藏页面实际上已被发现,这并没有错。

-t 6 如果尝试访问/下载某个页面或文件失败,这将设置在放弃该文件并继续之前的重试次数。您通常确实希望它最终放弃(如果您希望它永远尝试,请将其设置为 0),但您也不希望它放弃,如果该网站只是不稳定第二或第二。我觉得 6 是合理的。

-w 5 这告诉 wget 在抓取下一个文件之前等待几秒钟(在这种情况下为 5 秒钟)。在这里使用某些东西通常很关键(至少 1 秒)。让我解释。默认情况下,wget 将尽可能快地抓取页面。这很可能是每秒多个请求,这可能会给服务器带来巨大的负载(特别是如果该站点是用 PHP 编写的,对每个请求进行 MySQL 访问,并且不使用缓存)。如果该网站是在共享主机上,那么这种负载可能会让某人离开他们的主机。即使在 VPS 上,它也可以让一些网站瘫痪。即使网站本身幸存下来,在几秒钟内被大量请求轰炸也可能看起来像是 DOS 攻击,很可能会自动阻止您的 IP。如果您不确定该站点是否可以处理大量涌入的流量,请使用 -w # 开关。5 通常非常安全。在大多数情况下,即使是 1 也可能没问题。但是使用一些东西。

【讨论】:

    【解决方案3】:

    以上都没有完全满足我的需要(整个网站和所有资产)。这虽然有效。

    首先,按照this 教程在 OSX 上获取 wget。

    然后运行这个

    wget --recursive --html-extension --page-requisites --convert-links http://website.com
    

    【讨论】:

    • 如果您只想从 url 及其子域中添加 --no-parent
    • 确保包含 www.如果网站强制 www。否则它不会下载任何东西。
    【解决方案4】:

    按照@Abhijeet Rastogi 的回答中的建议,最好的方法是用wget 刮掉它。如果您不熟悉 is 然后 Blackwidow 是一个不错的刮刀。我过去用过它。 http://www.sbl.net/

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        相关资源
        最近更新 更多