怎样检测这两个URL是否指向同一网站?

3 投票
3 回答
2009 浏览
提问于 2025-04-18 10:29

我该如何判断这两个网址是否指向同一个网站(也就是说,它们是相同的网址),而不需要通过抓取网页内容来实现呢?

比如说,我需要通过一个GET请求来检查:

这两个网址其实是同一个网站,但我该怎么判断呢?

我比较喜欢用Ruby或Python,但其他语言也可以。

补充说明:

还有一种情况,比如http://www.inprovo.com/http://www.inprovo.com/default.asp。这个网站有一些随机的横幅广告,每次刷新时都会改变,所以每次加载的HTML内容并不相同。

谢谢!

3 个回答

0

你可以在Python中使用urllib2这个库。它的一个方法叫做urlopen,这个方法会返回一个响应对象。你可以用read()这个方法来查看响应的内容。如果两个相同的响应内容一样,那它们就是相同的。

import urllib2
page1 = urllib2.urlopen('http://www.n-economia.com/index.asp')
page2 = urllib2.urlopen('http://www.n-economia.com/')
if page1.read() == page2.read(): print 'same site'
else: print 'different'

补充说明:也许我误解了你的问题,但我以为你的意思是你需要检查两个网址是否链接到同一个页面,也就是它们的内容是否相同。如果不是这样,我很抱歉。

0

Python

使用 urlparse 库。

from urlparse import urlparse
>>> urlparse('http://www.n-economia.com/index.asp').netloc
'www.n-economia.com'
>>> urlparse('http://www.n-economia.com/').netloc
'www.n-economia.com'
>>> urlparse('http://www.n-economia.com/index.asp').netloc == urlparse('http://www.n-economia.com/').netloc
True 
0

最后,我用一种叫做 Tf-idf 的算法搞定了这个问题,这个算法的灵感来自于 @larsmans 的回答

引用: Tf-idf(以及类似的文本处理方法)可以在 Python 的 Gensim 和 scikit-learn 这两个库中找到。在 scikit-learn 这个库里,计算余弦相似度非常简单,就像这样:

from sklearn.feature_extraction.text import TfidfVectorizer

documents = [open(f) for f in text_files]
tfidf = TfidfVectorizer().fit_transform(documents)
# no need to normalize, since Vectorizer will return normalized tf-idf
pairwise_similarity = tfidf * tfidf.T

或者,如果文档是普通字符串的话:

>>> vect = TfidfVectorizer(min_df=1)
>>> tfidf = vect.fit_transform(["I'd like an apple",
...                             "An apple a day keeps the doctor away",
...                             "Never compare an apple to an orange",
...                             "I prefer scikit-learn to Orange"])
>>> (tfidf * tfidf.T).A
array([[ 1.        ,  0.25082859,  0.39482963,  0.        ],
       [ 0.25082859,  1.        ,  0.22057609,  0.        ],
       [ 0.39482963,  0.22057609,  1.        ,  0.26264139],
       [ 0.        ,  0.        ,  0.26264139,  1.        ]])

一些有用的链接:

撰写回答