赞
踩
一、python操作redis
步骤:
第一步 安装 redis
pip install redis
第二步 python操作redis
1 、导入redis
import redis
2 、链接reids --> 链接地址 端口号
r = redis.StrictRedis(host=‘localhost’,port=6379,db=0)
备注:指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0
如图:
3 、逻辑实现(增删改查)
将字节类型转成字符串类型:
补充:
报错:
启动redis:
在安装路径(桌面)找到redis文件夹,点击进去。
再次运行:(上图中的2个cmd不可以关闭)
二、其他(需要的时候,再回来看)
1、字符串相关操作
import redis class TestString(object): def __init__(self): self.r = redis.StrictRedis(host='192.168.75.130',port=6379) 设置值 def test_set(self): res = self.r.set('user1','juran-1') print(res) 取值 def test_get(self): res = self.r.get('user1') print(res) 设置多个值 def test_mset(self): d = { 'user2':'juran-2', 'user3':'juran-3' } res = self.r.mset(d) 取多个值 def test_mget(self): l = ['user2','user3'] res = self.r.mget(l) print(res) 删除 def test_del(self): self.r.delete('user2')
2、列表相关操作
class TestList(object): def __init__(self): self.r = redis.StrictRedis(host='192.168.75.130',port=6379) 插入记录 def test_push(self): res = self.r.lpush('common','1') res = self.r.rpush('common','2') # res = self.r.rpush('jr','123') 弹出记录 def test_pop(self): res = self.r.lpop('common') res = self.r.rpop('common') 范围取值 def test_range(self): res = self.r.lrange('common',0,-1) print(res)
3、集合相关操作
class TestSet(object):
def __init__(self):
self.r = redis.StrictRedis(host='192.168.75.130', port=6379)
添加数据
def test_sadd(self):
res = self.r.sadd('set01','1','2')
lis = ['Cat','Dog']
res = self.r.sadd('set02',lis)
删除数据
def test_del(self):
res = self.r.srem('set01',1)
随机删除数据
def test_pop(self):
res = self.r.spop('set02')
4、哈希相关操作
class TestHash(object): def __init__(self): self.r = redis.StrictRedis(host='192.168.75.130', port=6379) 批量设值 def test_hset(self): dic = { 'id':1, 'name':'huawei' } res = self.r.hmset('mobile',dic) 批量取值 def test_hgetall(self): res = self.r.hgetall('mobile') 判断是否存在 存在返回1 不存在返回0 def test_hexists(self): res = self.r.hexists('mobile','id') print(res)
三、scrapy_redis(分布式爬虫)概述
学习目标:
(1) 了解scrapy-redis的工作流程(面试)
(2)会把普通的scrapy爬虫改写成分布式爬虫
1、什么是scrapy_redis
分布式: 多个人在一起做不同的事
集群 :多个人在一起做相同的事
问:scrapy和scrapy-redis有啥区别?
scrapy :python的爬虫框架 ,爬取效率极高 具有高度的定制型,不支持分布式;
scrapy-redis :基于redis数据库, 运行在scrapy之上的一个组件, 可以让scrapy支持分布式开发, 支持主从同步。
2、分布式爬虫的优点
(1)可以充分利用多态机器的带宽
(2)可以充分利用不同电脑的ip
(3)多台机器爬取效率更高
于此同时出现的问题:
(1)怎么保证数据不会出现重复的?
(2)怎么保证数据存到同一个地方呢?
四、scrapy_redis工作流程
1、回顾scrapy工作流程
2、scrapy_redis工作流程
也就是说,调度器把url给到redis,redis再给回调度器 ,再给到引擎。
五、如何实现分布式爬虫(步骤)
(一)几点说明:
1、安装: pip install scrapy-redis
2、scrapy_redis中的settings文件:(与scrapy的settings文件有很大不同)
# Scrapy settings for example project # # For simplicity, this file contains only the most important settings by # default. All the other settings are documented here: # # http://doc.scrapy.org/topics/settings.html # SPIDER_MODULES = ['example.spiders'] NEWSPIDER_MODULE = 'example.spiders' USER_AGENT = 'scrapy-redis (+https://github.com/rolando/scrapy-redis)' DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 指定那个去重方法给request对象去重 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 指定Scheduler队列 SCHEDULER_PERSIST = True # 队列中的内容是否持久保存,为false的时候在关闭Redis的时候,清空Redis #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue" #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue" #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack" ITEM_PIPELINES = { 'example.pipelines.ExamplePipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400, # scrapy_redis实现的items保存到redis的pipline } LOG_LEVEL = 'DEBUG' # Introduce an artifical delay to make use of parallelism. to speed up the # crawl. DOWNLOAD_DELAY = 1
3、运行结束后redis中多了三个键
dmoz:requests 存放的是待爬取的requests对象
dmoz:item 爬取到的信息
dmoz:dupefilter 爬取的requests的指纹(也就是已经爬过了的requests对象)
(二)将scrapy改成scrapy_redis的步骤:
1、scrapy的步骤:
第一步 创建scrapy项目
第二步 创建爬虫文件
第三步 逻辑操作
2、改成scrapy_redis的步骤:
改的是第二步爬虫文件:
(1)模块
(2)继承的父类
(3)把start_urls 改写成 reids_key=‘爬虫文件名字’
以及settings文件当中的内容:
#去重过滤
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#scheduler队列
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#数据持久化
SCHEDULER_PERSIST = True
ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400,
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。