比较两个网站并确定它们是否“相等”?

3

我们正在迁移网站服务器,希望有一种自动化的方式来检查基本站点结构,以确定在新服务器上呈现的页面与旧服务器上的页面是否相同。我想知道是否有任何工具可以协助完成这个任务?

6个回答

5

获取两个站点的格式化输出(这里我们使用w3m,但lynx也可以使用):

w3m -dump http://google.com 2>/dev/null > /tmp/1.html
w3m -dump http://google.de 2>/dev/null > /tmp/2.html

然后使用wdiff,它可以给出两个文本的相似度百分比。
wdiff -nis /tmp/1.html /tmp/2.html

使用colordiff可能更容易看出差异。

wdiff -nis /tmp/1.html /tmp/2.html | colordiff

输出摘录:

Web Images Vidéos Maps [-Actualités-] Livres {+Traduction+} Gmail plus »
[-iGoogle |-]
Paramètres | Connexion

                           Google [hp1] [hp2]
                                  [hp3] [-Français-] {+Deutschland+}

           [                                                         ] Recherche
                                                                       avancéeOutils
                      [Recherche Google][J'ai de la chance]            linguistiques


/tmp/1.html: 43 words  39 90% common  3 6% deleted  1 2% changed
/tmp/2.html: 49 words  39 79% common  9 18% inserted  1 2% changed

(他实际上把google.com翻译成了法语...很有趣)

常见的百分比值表示两个文本之间的相似程度。此外,您可以通过单词轻松地查看差异(而不是按行查看,这可能会使其混乱)。


如果您只想要百分比,可以执行以下操作:wdiff -nis /tmp/1.html /tmp/2.html | tail -2 | awk '{print $5}' - Pedro

2
问题在于如何检查“渲染”页面。如果页面没有任何动态内容,最简单的方法是使用md5或sha1命令为文件生成哈希值,并将其与新服务器进行比较。
如果页面具有动态内容,则必须使用类似wget的工具下载网站:
wget --mirror http://thewebsite/thepages 然后按照Warner建议的使用diff或再次使用哈希值来检查。我认为diff可能是最好的选择,因为即使更改一个字符也会破坏哈希值。

我在看到你的回答之前正在编辑。你提供了一个很好的建议。 - Warner

1
我已经创建了以下 PHP 代码,它可以执行 Weboide 在这里建议的操作。感谢 Weboide!
粘贴在这里:

http://pastebin.com/0V7sVNEq


1
使用开源工具 recheck-web (https://github.com/retest/recheck-web),有两种可能性: 对于这两种解决方案,您目前需要手动列出所有相关的 URL。在大多数情况下,这不应该是一个大问题。recheck-web 将比较呈现的网站,并向您显示它们的确切差异(即不同的字体、不同的元标记,甚至不同的链接 URL)。它还为您提供了强大的过滤器,让您专注于您关心的内容。
免责声明:我参与了recheck-web的创建。

0

除了渲染每个页面、截取屏幕并比较这些截图之外,我认为不可能比较已渲染的页面。

然而,通过使用wget递归下载后,比较已下载的网站是完全可能的。

  wget [option]... [URL]...

   -m
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite recursion depth and keeps FTP
       directory listings.  It is currently equivalent to -r -N -l inf --no-remove-listing.

接下来的步骤是执行Warner推荐的递归差异比较。

0

将文件复制到同一服务器的/tmp/directory1/tmp/directory2中,并运行以下命令:

diff -r /tmp/directory1 /tmp/directory2

为了所有目的,您可以将它们放在您喜欢的位置并使用您喜欢的命名约定。

编辑1

您可以潜在地使用lynx -dumpwget并对结果运行差异。


1
那不是会比较文件本身吗?我想要比较经过 Apache(和 PHP)运行后的渲染页面。我认为我正在寻找某种网络爬虫。 - Joshua Enfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接