如何检查两个网址是否返回同一页面

时间:2012-02-21 07:19:10

标签: ruby http url canonical-link

让我们假设以下网址指向相同的内容。

如何检查这些链接是否指向相同的内容? 我特别使用Ruby,但欢迎任何其他建议......

1 个答案:

答案 0 :(得分:2)

第一个天真的猜测是获取内容并创建哈希。但是,如果内容完全具有任何动态行为,则这不是一个好的指标。

require 'open-uri'
require 'digest/md5'

f1 = open("http://rubyonrails.org/?id=1")
c1 = f1.read
d1 = Digest::MD5.hexdigest(c1)

f2 = open("http://rubyonrails.org/");
c2 = f2.read
d2 = Digest::MD5.hexdigest(c2)

d1 == d2 # true

如果我们重复同样的事情:www.google.com和google.com,则哈希值不匹配,因为内容可能略有不同。

您可以对字符串使用Jaro Winkler度量,它为两个字符串的相似程度提供0到1之间的值。 在ruby中也有一个纯implementation的算法。本机实现要快得多。我过去使用过amatch库。

require 'open-uri'
require 'fuzzystringmatch'

f1 = open("http://www.google.com/")
c1 = f1.read

f2 = open("http://google.com/")
c2 = f2.read

delta = 0.1
jarow = FuzzyStringMatch::JaroWinkler.create( :pure )
distance = jarow.getDistance(c1, c2) # 0.85 .. that is the text looks to be 85% similar