我在想一个最好的方法,如何检查两个或更多的网址重复的情况下,他们有一些额外的参数,如下面的代码。在fac中,url1和url2是相同的,但是当运行webspider时,它将被视为两个单独的url,并且结果将被复制。在
from urllib2 import urlopen
import hashlib
url1 = urlopen('http://www.time.com/time/nation/article/0,8599,2109975,00.html?xid=gonewssedit')
u1 = hashlib.md5(u1).hexdigest()
url2 = urlopen('http://www.time.com/time/nation/article/0,8599,2109975,00.html')
u2 = hashlib.md5(u2).hexdigest()
if u1 == u2:
print 'yes'
else:
print 'no'
简而言之,我将使用url头生成md5散列,然后将其存储在数据库中,然后当我抓取新的url时,我可以检查它是否重复。但我不确定这是在Python中完成这项工作的最佳方法。在
非常感谢
也许可以这样试试?在
如果不检索两个uri,就无法知道两个uri是否指向同一个资源。而且,即使它们基本上是相同的内容,它们也可能具有动态元素(如广告),这些元素随每个请求而变化,因此很难通过编程方式检测这两个uri是否相同。在
网页的结果可能相同或不同,这取决于“额外参数”。因此,一般来说,不能定义只通过查看url来检测重复内容的规则。在
我建议将url1和url2视为不一样。计算一下从URL接收到的每一块(比如1024个单词)的MD5和。维护这些md5sum的哈希映射,以便能够检测重复项。在
可能一些web crawling tools可能提供了一些您需要的特性。在
更新基于OP的评论:我写了一些代码来增强我的回答。有两种版本:第一种更简单:
期望上面的代码以预期的方式检测重复项是天真的:当前的网页太复杂了。因此,即使是用户眼中相同的两个url,由于广告、散列标签、自url名称包含等原因,实际上也存在许多差异
第二个版本更复杂。它基于beauthulsoup对内容进行了有限的语义分析:
^{pr2}$然而,第二个版本也不起作用。原因依旧。实际上,两个url的头文本之间的差异是包含的哈希值,而两个url的正文文本之间的差异是一个字符串
webhp
。我用过difflib.context_diff来计算差额。在可以增强代码以包含第三个版本,该版本更智能地解析web页面并更智能地计算diff。例如,即使是具有5%diff的文本也声明为重复(使用difflib函数可以很容易地计算出这个比率)。在
相关问题 更多 >
编程相关推荐