时间:2021-05-22
Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台。
连接数据库
注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver
Master连接时host为localhost即本机的ip
_db = redis.Reds(host='localhost', port=6379, db=0)Slaver连接时的host也为Master的ip,端口port和数据库db不写时为默认值6379、0
_db = redis.Redis(host='192.168.235.80')Redis含列表、集合,字符串等几种数据结构,具体详细的几种数据结构的操作命令可查看Redis官网http://redis.io/commands,下面是对集合进行操作的一些命令
_db.sadd(key, *values) # 插入指定values到集合中并返回新插入的的值的数量_db.spop(self.key) # 随机从集合中的得到一个元素将其从集合中删除并作为返回值返回_db.smembers(self.key) # 返回集合的所有元素_db.delete(key) # 删除整个集合, 成功返回1, 失败返回0_db.srandmember(self.key) # 从集合中随机选取一个元素作为返回_db.sismember(self.key, value) # 判断指定value是否在本集合中,成功返回1,失败返回0例如,Master可利用redis将url上传到数据库
for i in range(20): # 将需爬取的糗事百科前20页的url并存入urls集合 url = 'http://pile('<.*?>') # 匹配包括括号及括号内无关内容的模板 url = job_redis.spop('urls') while url: # 当数据库还存在网页url,取出一个并爬取 try: request = urllib2.Request(url, headers=headers) response = urllib2.urlopen(request) text = response.read() except urllib2.URLError, e: # 若出现网页读取错误捕获并输出 if hasattr(e, "reason"): print e.reason content = re.findall(content_pattern, text) # 获取含模板内容的列表 for x in content: if "img" not in x[1]: # 过滤含图片的故事 x = re.sub(pattern, '', x[0]) x = re.sub('\n', '', x) stories.append(x) url = job_redis.spop('urls') time.sleep(3) return stories def main(self): self.get_content()if __name__ == '__main__': Clawer()将此代码在几台机器同时运行,调节其身份为master或slaver,做到简单的分布式爬虫
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在定向爬虫的制作过程中,使用分布式爬取技术可以显著提高爬取效率。而Redis配合Scrapy是实现分布式爬取的基础。Redis是一个高性能的Key-Value数
前面讲完了Redis的分布式锁的实现,接下来讲Redisson的分布式锁的实现,一般提及到Redis的分布式锁我们更多的使用的是Redisson的分布式锁,Re
分布式锁一般有三种实现方式:1、数据库乐观锁;2、基于Redis的分布式锁;3、基于ZooKeeper的分布式锁。本文将介绍第二种方式,基于Redis实现分布式
Redis实现分布式锁的几种方法总结分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统
分布式锁一般有三种实现方式:1.数据库乐观锁;2.基于Redis的分布式锁;3.基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分