博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 爬虫使用布隆过滤器实现url去重
阅读量:6301 次
发布时间:2019-06-22

本文共 1870 字,大约阅读时间需要 6 分钟。

hot3.png

#!/usr/bin/python3# encoding=utf-8import redisfrom hashlib import md5class SimpleHash(object):    def __init__(self, cap, seed):        self.cap = cap        self.seed = seed    def hash(self, value):        ret = 0        for i in range(len(value)):            ret += self.seed * ret + ord(value[i])        return (self.cap - 1) & retclass BloomFilter(object):    def __init__(self, host='localhost', port=6379, db=0, blockNum=1, key='bloomfilter'):        """        :param host: the host of Redis        :param port: the port of Redis        :param db: witch db in Redis        :param blockNum: one blockNum for about 90,000,000; if you have more strings for filtering, increase it.        :param key: the key's name in Redis        """        self.server = redis.Redis(host=host, port=port, db=db)        self.bit_size = 1 << 31  # Redis的String类型最大容量为512M,现使用256M        self.seeds = [5, 7, 11, 13, 31, 37, 61]        self.key = key        self.blockNum = blockNum        self.hashfunc = []        for seed in self.seeds:            self.hashfunc.append(SimpleHash(self.bit_size, seed))    def isContains(self, str_input):        if not str_input:            return False        m5 = md5()        m5.update(str_input.encode("utf8"))        str_input = m5.hexdigest()        ret = True        name = self.key + str(int(str_input[0:2], 16) % self.blockNum)        print(name)        for f in self.hashfunc:            loc = f.hash(str_input)            ret = ret & self.server.getbit(name, loc)        return ret    def insert(self, str_input):        m5 = md5()        m5.update(str_input.encode("utf8"))        str_input = m5.hexdigest()        name = self.key + str(int(str_input[0:2], 16) % self.blockNum)        for f in self.hashfunc:            loc = f.hash(str_input)            self.server.setbit(name, loc, 1)

 

转载于:https://my.oschina.net/u/3264690/blog/857295

你可能感兴趣的文章
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>
网络编程中常见结构体
查看>>
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>
configure: error: in `/root/httpd-2.2.11/srclib/apr': c
查看>>
CentOS7搭建Kubernetes-dashboard管理服务
查看>>
buildroot下查找外部编译器通过ext-toolchain-wrapper调用的参数
查看>>