检测两个HTML页面是否相似的算法?

时间:2014-12-02 18:23:07

标签: html ruby algorithm web-scraping similarity

我有10.000个HTML页面。

我知道有些是使用相同的CMS系统构建的,因此具有相同结构的“种类”,但不完全相同。我希望有大约100种不同的CMS,但事先我不知道,所以我找不到预定义的模式。

这就是为什么我需要一个算法来计算每个页面的相似性度量,然后根据相似性对它们进行聚类..?

我很乐意在Ruby中找到一些工具,但也欢迎使用其他语言。

PS。我不想看内容(文本)的相似性。只想在元级别进行比较。像HTML结构,css规则,类名等等。

1 个答案:

答案 0 :(得分:1)

在过去的生活中,我为一家公司编写了大量的分析软件,该公司必须通过大量的页面,轻松地说出您正在讨论的数字,来返回类似的信息。

无论您想如何确定相似性,您都必须自己编写规则。页面变化太大,代码无法真正理解“类似”的含义,也无法确定对您的特定用途有何重要意义。

你可以做的事情:

  • 确定“文本”节点的总大小(可查看和不可见文本以及CSS和JavaScript。您可以获取最后两个文本的大小并从总文本大小中减去该大小以了解总内容,但是这不会考虑CSS或JavaScript在可见页面上的影响。
  • 在元标记中查找有用的信息,例如关键字或相关网页。
  • 查找表格并获取其行和单元格的计数以及文本的大小,并可能搜索要关联或比较的数据。
  • 查找链接和锚点,并获得其文本和/或href的相似性。
  • 使用“alt”文本查找图像和任何内容,然后进行比较。

最后,您必须浏览页面并确定重要内容,而其他程序员无法猜出这些内容。

HTML结构,单个标签的顺序,并不像以前那么有用,因为CSS和JavaScript可以在加载到浏览器后将整个页面上的内容移动,因此眼睛看到的内容会有所不同很大程度上来自基于代码的标准工具。同一CMS的两个版本可以有完全不同的输出,但是,由于CSS / JavaScript,对于观看者来说看起来是一样的,所以你必须确定如何关联它们。