2012-01-11 26 views
2

这还不是编程问题!比较web页面 - simhash和DOM边缘节点处理

但我正在研究如何比较网页以查看页面是否相同/相似。这是一个个人项目,而不是工作/学校...(只是说!)

我找到了一些基本的simhash实现,并想知道是否有人可以指向我一个非常好的强大的py/php simhash实现。我宁可不要在这方面重新发明轮子。另外,我对潜在能够为给定页面计算/生成DOM结构感兴趣,然后计算树/结构的“结束/边缘”节点以确定这可能是一种方法确定页面的相似性。

因此,我也对任何可用于生成给定页面的DOM结构列表的工具/应用感兴趣。我原以为'网络搜索会导致许多py/php/apps为测试目的生成这种图形/列表。

我也可以认识到,我可能只是在我的搜索中使用错误的术语。

因此,关于在哪里看的想法和意见,需要考虑的事情将是受欢迎的。

感谢

+0

您是否关心JavaScript的dom更改,或只是最初交付的html? – 2012-01-11 17:16:13

+0

为我的测试,我已经提取了HTML /数据,并正在处理返回的HTML文档。这就是我对比较研究感兴趣的原因。我将要有〜1000页的比较,并且从这个语料库/域,该过程必须通过算法确定独特的页面。所以在我想要开发的解决方案中没有jscript。我正在寻找soln以在php/python中。谢谢 – 2012-01-11 17:19:32

+0

嗯,我想这回答了我的问题:)只是确保你不需要像提取DOM之前的浏览器那样对待HTML。 – 2012-01-11 17:33:00

回答

0

好了,上面你说你不关心什么从网站JS可能会做的DOM-所以要回答这个问题的第一部分的意见,你需要解析使用lxml的HTML,BeautifulSoup或其他DOM生成的Python HTML解析器之一。

例如,使用lxml的,你可以得到所有的“叶子”元素

>>> from lxml import etree 
>>> html = etree.HTML("<html><body><div class='content'>...</div><div class='advert'>....</div></body></html>") 
>>> leaves = [d for d in html.iterdescendants() if len(d.getchildren()) == 0] 
>>> leaves[0].text 
'...' 

快速谷歌为“蟒蛇simhash”提供了大量可能的实现,包括python-hashes,它看起来像一个很好的解决方案我。但是,这种操作可以从C级性能中受益,所以如果您计划在生产中大量使用它,我会发现一个流行的使用Python绑定的C实现。

HTH :)

+0

马特。我已经创建了simhash方法的测试实现,还有一些其他实现,它们专注于查看edgenode /叶子以确定多个页面是否“相似”。我实际上希望能够与其他可能在实施方面有经验的人谈谈他们对可行性的看法。谢谢 – 2012-01-17 19:24:47

+1

也许你可以编辑一些问题?很难理解你在找什么...... 此外,关于术语 - “端节点”的注释在树中通常被称为*树叶*,并且*在有向图中汇*。我提到它是因为术语“边缘”在数据结构中具有非常特殊的含义。 – 2012-01-17 20:31:50