一个基本的Discourse存档工具

由于我使用的 Discourse 论坛将在几周后下线,因此我开始归档该网站。我进行了大量研究、试错,并找到了一个使用 HTTrack 的简单解决方案。以下是我学到的一切。

使用 HTTrack 归档 Discourse 站点
对于 Windows 用户来说,最好的解决方案似乎是 HTTrack。这个工具效果很好,它将网站归档为 HTML 文件。所有类别、主题和帖子都已归档,包括所有带有相对导航链接的页面。

HTTrack 的基本教程在这里:https://fossbytes.com/download-website-offline-access-using-httrack-use-website-without-internet/。我保留了默认设置,并进行了以下自定义设置:

  • 网站地址:
    • https://forums.gearboxsoftware.com/c/homeworld/
    • https://forums.gearboxsoftware.com/c/homeworld-dok/
  • 扫描规则:
    • -gearboxsoftware.com/* -forums.gearboxsoftware.com/* +forums.gearboxsoftware.com/c/homeworld/* +forums.gearboxsoftware.com/c/homeworld-dok/* +forums.gearboxsoftware.com/t/* +forums.gearboxsoftware.com/user_avatar/* +sea2.discourse-cdn.com/*
  • 浏览器 ID(又名用户代理):
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

注意:存在一个 CSS 问题,导致类别链接无法正常工作,但这可以按下面所述轻松修复。

CSS 问题
当以 googlebot 的身份查看类别页面时,主题链接不起作用。例如:https://web.archive.org/web/20220731051419/https://forums.gearboxsoftware.com/c/homeworld/57

这使得在 HTTrack、archive.org 和 google catch 中无法导航类别页面。这似乎是 Discourse 在 CSS 文件中的一个问题。要修复链接,只需阻止/删除以下 CSS 文件:

  • stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css?__ws=forums.gearboxsoftware.com

@codinghorror - 你们能解决这个问题吗?

挑战
我遇到了以下挑战,并在大量试错后最终克服了它们。

  • Discourse 页面是使用 JavaScript 动态生成的。这使得大多数存档/爬虫工具的效果不佳。
  • 大多数主题只加载前约 20 个帖子,其余帖子在滚动时才会出现。按 Ctrl+P 会加载一个显示所有帖子的“打印”页面。用户每小时只能打印 5 页,但 Discourse 网站管理员可以增加此限制。
  • Adrelanos 指出,HTTrack 未能正确归档多页主题,但我怀疑这个问题是由于他的 HTTrack 设置造成的,因为我没有遇到这个问题。
  • 将页面保存为 PDF 不会包含任何折叠的详细信息部分。
  • 通过在 URL 末尾添加 ?_escaped_fragment_ 可以以基本 HTML 加载页面,但这仅适用于主题,不适用于类别。

一旦您了解到所有 Discourse 页面/内容都可以正确渲染为 HTML 以供爬虫使用,上述挑战就不再是问题。要做到这一点,您必须将爬虫/浏览器的用户代理更改为 googlebot,以获取页面的 HTML 版本。

Archive.org
如果您使用 web.archive.org 上的“立即保存页面”功能,它将归档 Discourse 的 JavaScript 版本,效果不佳。Archive.org 使用请求存档的人的用户代理。因此,您必须将用户代理更改为 googlebot。您可以获取一个名为“User-Agent Switcher for Chrome”的 Chrome 扩展程序。在选项中添加:

  • 名称:Googlebot
  • 字符串:Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • 组:Chrome
  • 指示符标志:1

替代存档工具
此处列出了许多工具:Archive an old forum "in place" to start a new Discourse forum
我还简要测试了 Cyotek WebCopy、A1 Website Download 和 WAIL 等 GUI 工具。
命令行工具包括 mcmcclur 的工具和 wget。wget 的教程在这里:https://letswp.justifiedgrid.com/download-discourse-forum-wget/
但是,对于 Windows 用户来说,最好的解决方案似乎是 HTTrack。

注意:由于我是新用户,我最多只能在帖子中添加两个链接。因此,我将一些链接变成了预格式化文本。

9 个赞

我现在已经找到了根本原因。原来背景图片与链接发生了冲突!

在此文件中:
stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css

在此代码中:

body:before {
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    content: "";
    display: block;
    background-color: #000000;
    background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23adadad' fill-opacity='0.4' fill-rule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E");
    position: fixed;
    height: 100vh;
    width: 100vw;
    top: 0;
    left: 0;
    z-index: 0;
    opacity: 0.03;
    background-size: 70%;
}

CSS 问题修复
将背景图片向下移动一层以修复链接。

  • 打开 stylesheets/desktop_theme_10_1965d1d398092f2d9f956b36e08b127e00f53b70.css 并将所有三个“z-index:-1;”替换为“z-index:-2;”。然后将“z-index:0;”替换为“z-index:-1;”。
  • 然后打开 desktop_32713c1b6551369eb391868f3d4e3f2ac9c38cf1.css 并简单地将所有三个“z-index:-1;”替换为“z-index:-2;”。链接现在将起作用。
7 个赞

感谢告知,因为这是爬虫/存档视图,所以这些图片本就不应显示……因此我已提交一个 PR 来移除它们

6 个赞

就我而言,我编写了一个最小可行 Python 脚本,该脚本使用 API 执行简单的帖子内容备份:GitHub - jamesob/discourse-archive: Provides a simple archive of Discourse content

它非常基础,但应该能让某人大致了解如何生成适合公开的存档。

4 个赞

我刚想出了一种以模块化方式抓取 Discourse 网站所有内容的方法(可以选择抓取哪些类别/主题/限制)。看看吧。到目前为止,它只是一个获取网站本地/静态版本的工具:GitHub - Diegorb1329/broad_listening_eth

1 个赞