作家
登录

Python编写知乎爬虫实践

作者: 来源: 2017-06-19 10:01:19 阅读 我要评论

布隆过滤器

平日的判重做法是如何呢?Bloom Filter. 简单讲它仍然是一种hash的办法,然则它的特点是,它可以应用固定的内存(不随url的数量而增长)以O(1)的效力剖断url是否已经在set中。可惜世界没有白吃的午餐,它的独一问题在于,如不雅这个url不在set中,BF可以100%肯定则个url没有看过。然则如不雅这个url在set中,它会告诉你:这个url应当已经出现过,不过我有2%的不肯定性。留意这里的不肯定性在你分派的内存足够大年夜的时刻,可以变得很小很少。

  1. # bloom_filter.py 
  2.  
  3. BIT_SIZE = 5000000 
  4.  
  5. class BloomFilter: 
  6.      
  7.     def __init__(self): 
  8.         # Initialize bloom filter, set size and all bits to 0 
  9.         bit_array = bitarray(BIT_SIZE) 
  10.         bit_array.setall(0) 
  11.  
  12.         self.bit_array = bit_array 
  13.          
  14.     def add(self, url): 
  15.         # Add a url, and set points in bitarray to 1 (Points count is equal to hash funcs count.) 
  16.         # Here use 7 hash functions. 
  17.         point_list = self.get_postions(url) 
  18.  
  19.         for b in point_list: 
  20.             self.bit_array[b] = 1 
  21.  
  22.     def contains(self, url): 
  23.         # Check if a url is in a collection 
  24.         point_list = self.get_postions(url) 
  25.  
  26.         result = True 
  27.         for b in point_list: 
  28.             result = result and self.bit_array[b] 
  29.      
  30.         return result 
  31.  
  32.     def get_postions(self, url): 
  33.         # Get points positions in bit vector. 
  34.         point1 = mmh3.hash(url, 41) % BIT_SIZE 

      推荐阅读

      Python源码理解: +=和 xx = xx + xx的区别

    前菜在我们应用Python的过程, 很多时刻会用到 + 运算, 例如:先来看看字节码:a = 1 + 2 print a # 输出 3 不但在加法中应用, 在字符串的拼接也同样发挥这重要的感化, 例如:a = 'abc' +>>>详细阅读


    本文标题:Python编写知乎爬虫实践

    地址:http://www.17bianji.com/lsqh/35819.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)