怎样检测这两个URL是否指向同一网站?
我该如何判断这两个网址是否指向同一个网站(也就是说,它们是相同的网址),而不需要通过抓取网页内容来实现呢?
比如说,我需要通过一个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. ]])
一些有用的链接: