python实现bitmap原理

原创 2008年10月03日 11:33:00


简单说明一下,这篇文章要说的bitmap不是大家google上检索出来的做图片的东东,而是对于爬虫而言,需要实现的一种不抓取重复页面的技术,大致说一下(具体可以去看相关的搜索引擎的书籍),一个url使用md5生成一个4个字节的md5码,然后存放入bitmap中,当然是要保证只存放一个,判断后面的找到的url是否已经存放在这个bitmap中了。

补充一下,http://www.imperialviolet.org/pybloom.html 里面说的bloom,pybloom(也是不抓取重复页面的技术),完全是一个垃圾,不信的话可以用一个整形1811395773试试,说是已经放在bloom中了,还有好多这种情况,这个比较让人受不了。


  1.  # -*- coding: utf-8 -*-
  2. import array
  3. '''''
  4. author: malaka
  5. mail:wengxiaojun1979@gmail.com
  6. city:ShangHai
  7. 目的是为了记录url地址,保证不重复抓取url地址;技术实现的概念主要是参考了梁斌的<<走进搜索引擎>>,使用python实现了bitmap
  8. '''
  9. class intBitmap:
  10.     '''''
  11.     说明:保存int大小(4 * 1byte = 4* 8 单位bit)的数据到bitmap中
  12.     len  :是指在每个array对象中要有多少个元素(最好是使用默认的值)
  13.     
  14.     '''
  15.     def __init__(self,len=8):
  16.         self.len = len
  17.         self.map = array.array ('L''/x00' * self.len * 4
  18.         
  19.   
  20.             
  21.     def __getitem__(self,id):
  22.         if id > self.len or id < 0 :
  23.             print 'error! id must >0 and <%i'%self.len
  24.         else : return self.map[id]
  25.         
  26.     
  27.     def insert(self,integerI):
  28.         index_Hash = integerI / 32 % self.len
  29.         index_int = integerI % 32
  30.         self.map[index_Hash] = (self.map[index_Hash] | (1<<index_int) )  
  31.    
  32.     def __contains__ (self, integerI,id=0):
  33.         index_Hash = integerI / 32 % self.len
  34.         index_int = integerI % 32
  35.         if(self.map[index_Hash] & (1<<index_int)):
  36.            return 1
  37.         else :
  38.            return 0   
  39.     
  40. class MD5BitMap():
  41.     '''''
  42.     说明:保存一个md5码到bitmap中 md5码大小(4 * 4byte = 4* 4 * 8 单位bit)的数据到bitmap中,也就是说128个bit
  43.     size :是指需要生成多少个array对象(最好是使用默认的值)
  44.     len  :是指在每个array对象中要有多少个元素(最好是使用默认的值)
  45.     
  46.     '''
  47.     def __init__(self, size=4,len=8):
  48.         self.size = size
  49.         self.len = len
  50.         self.collection = [] 
  51.         self.makeCollection() 
  52.         
  53.     def makeCollection(self):
  54.         for i in range(0,self.size):
  55.             self.collection.append(array.array ('L''/x00' * self.len * 4))  
  56.             
  57.             
  58.     def __getitem__(self,id):
  59.         if id > self.size or id < 0:
  60.             print 'error! id must >0 and <%i'%self.size
  61.         else : return self.collection[id]
  62.         
  63.     def getMd5(self,strURL):
  64.         import md5  
  65.         m1 = md5.new()   
  66.         m1.update(strURL)   
  67.         dest1 = m1.hexdigest()  
  68.         print (int(dest1[0:8],16),int(dest1[8:16],16),int(dest1[16:24],16),int(dest1[24:32],16))
  69.         return (int(dest1[0:8],16),int(dest1[8:16],16),int(dest1[16:24],16),int(dest1[24:32],16))
  70.         
  71.         
  72.     def insert(self,url):
  73.         splitUrls = self.getMd5(url)
  74.         for i in range(0,4):
  75.             index_Hash = splitUrls[i] / 32 % 8
  76.             index_int = splitUrls[i]  % 32
  77.             self.collection[i][index_Hash] = (self.collection[i][index_Hash] | (1<<index_int) )  
  78.         
  79.     def __contains__ (self, url):
  80.         splitUrls = self.getMd5(url)
  81.         for i in range(0,4):
  82.             index_Hash = splitUrls[i] / 32 % 8
  83.             index_int = splitUrls[i]  % 32
  84.             if not (self.collection[i][index_Hash] & (1<<index_int)):
  85.                 return 0
  86.         return 1    
  87. t = intBitmap()
  88. t.insert(1234)
  89. assert 1234 in t
  90. urlf = 'http://www.gbtai.com/radio369.htm'    
  91. test = MD5BitMap()
  92. test.insert(urlf)
  93. assert urlf in test

Python: 实现bitmap数据结构

http://my.oschina.net/goal/blog/200347  bitmap是很常用的数据结构,比如用于Bloom Filter中、用于无重复整数的排序等等。bitmap...
  • scdxmoe
  • scdxmoe
  • 2015年10月27日 19:11
  • 1597

Python图像处理库PIL的ImageDraw模块介绍

ImageDraw模块提供了图像对象的简单2D绘制。用户可以使用这个模块创建新的图像,注释或润饰已存在图像,为web应用实时产生各种图形。 PIL中一个更高级绘图库见The aggdraw Modul...
  • icamera0
  • icamera0
  • 2016年02月26日 08:11
  • 13517

[Python]数据结构--Bitmap 位图

[Python]数据结构–Bitmap 位图 ‘Festinatione facit vastum’ Bitmap简介 Bitmap的实现和使用 Bitmap简介 bitm...
  • weixin_38034182
  • weixin_38034182
  • 2018年01月13日 14:46
  • 75

python数据结构:bitmap,list链表,树,图

#--coding:utf8-- class Bitmap(): def __init__(self,max): self.size=int((max+31-1)/31) ...
  • u013636377
  • u013636377
  • 2016年01月05日 17:14
  • 632

将图片存储到Sqlite和取出

//第一步,将Drawable对象转化为Bitmap对象 Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap()); //第二步,声明并创建一个...
  • LGGisKing
  • LGGisKing
  • 2015年07月29日 22:44
  • 6430

Python PIL库之Image注解(API)

class Image Methods defined here: __getattr__(self, name) __init__(self) __repr__(self) c...
  • xiezhiyong3621
  • xiezhiyong3621
  • 2013年01月14日 09:09
  • 17595

Python图像处理库PIL的Image模块介绍(五)

26、  Seek 定义:im.seek(frame) 含义:在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第...
  • icamera0
  • icamera0
  • 2016年02月20日 23:20
  • 9508

Python代码学习笔记1

今天开始写第一篇博客,主要是在学习Python中碰到的一些问题。 学习Python的教程是Mark Lutz 的Learning Python 和 Programming Python。代码大部分都是...
  • x95623
  • x95623
  • 2016年09月26日 17:59
  • 539

python实现bitmap原理

简单说明一下,这篇文章要说的bitmap不是大家google上检索出来的做图片的东东,而是对于爬虫而言,需要实现的一种不抓取重复页面的技术,大致说一下(具体可以去看相关的搜索引擎的书籍),一个url使...
  • Xiao_Qiang_
  • Xiao_Qiang_
  • 2008年10月03日 11:33
  • 5545

Bitmap保存到本地

/* 保存方法 / public void saveBitmap() { Log.e(TAG, “保存图片”); File f = new File(“/sdcard/namecard...
  • ithouse
  • ithouse
  • 2015年09月24日 14:12
  • 2038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python实现bitmap原理
举报原因:
原因补充:

(最多只允许输入30个字)