抓取url的过程中,一般去重的实现python都是利用把url存入列表list(时间复杂度On)去实现,根据时间复杂度,list会随着url数量的增加时间复杂度逐渐增加,故我们可以
利用字典(时间复杂度O1)进行去重从而减少时间复杂度,不会因为url的大量增
加而时间复杂度进行增加。
利用list进行去重url的形式
urls = []
#我们用for循环抓取url,相当于采集了url链接
for i in xrange(10000):
url = "http://www.baidu.com/test.php?id=a&testid={i}".format(i=i)
#一般利用list进行的去重
if url not in urls:
urls.append(url)#随着url增加时间复杂度逐渐增加On
下面我们用defaultdict去实现这个去重方法,下面代码的逻辑如果dict中不存在
url,那么就把url存储到字典中并赋值为1,如果存在不会执行代码。
urls = defaultdict(lambda:'none_value')
#我们用for循环抓取url,相当于采集了url链接
for i in xrange(10000):
url = "http://www.baidu.com/test.php?id=a&testid={i}".format(i=i)
#用dict进行的去重
if urls[url] == "none_value":
urls.update({url:"1"})
#这个方法的好处就是即使大量的url去重或者查找时间复杂度始终是O1