Scrapy_redis
优点
- Scrapy_redis在Scrapy的基础上实现了更多,具体体现在: request去重(过滤以前都爬过的地址),爬虫持久化,和轻松实现分布式
redis
-
定义:Redis是一个开源的,内存数据库,它可以用作数据库、缓存和消息中间件,它支持多种类型的数据结构,
如字符串,哈希,列表,集合等 -
常用命令:
/etc/init.d/redis-server stop —> redis停止
/etc/init.d/redis-server start —> redis启动
/etc/init.d/redis-server restart —> redis重启redis-cli -h <hostname> -p <port> ---> 远程连接redis数据库
-
resdis常用命令:
1、select 1 ---> 切换到db1,默认在db0
2、keys * ---> 查看所有的redis键
3、type '键' ---> 查看键的数据类型
4、fushdb ---> 清空当前db
5、fushall ---> 清空所有db
list:
LPUSH mylist "hello" --> 向列表左边加入单个元素
LPUSH mylist a b c --> 向列表左边加入多个元素
LRANGE mylist 0 -1 --> 返回列表中所有的值
RPUSH mylist a b c ---> 向列表左右加入多个元素
LLEN mylist --> 返回列表中的长度
LPUSH(mylist, )
set:
SADD myset "one" ---> 往set中添加数据
SADD myset "one" "two" ---> 往set中添加多个数据
SMEMBERS myset ---> 获取myset中所有元素
SCARD myset ---> 获取数量
zset:
ZADD myzset 1 "one"
ZADD myzset 1 "one" 2 "two"
ZRANGE myzset 0 -1 withscores(是否显示份数)
ZCARD myzset
Scrapy_redis在redis中存储的数据
dmoz: dupefilter(set类型) 存放过滤用的请求指纹【指纹集合,存放的是已经进入scheduler队列的request对象指纹,指纹默认有请求方法,url和请求体组成】
dmoz: items(list类型) 存放item里传送来的数据,用来匹配高速的请求数据速度,提高数据读写速度【pipeline中开启RedisPipeline才会存入】
dmoz: requests(zset类型) 待爬取的request对象【Scheduler队列,存放等待请求的request对象,获取的过程是pop操作,即发送请求一个会去除一个】
python中使用redis
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=15)
(decode_responses=True) # 此参数将不会存储bytes类型,而是字符串类型
- redis有 0-15,共16个数据库,默认使用0数据库
redis = redis.Redis(connection_pool=pool)
[字符串中]
> 增:
redis.set('name', 'hehe', 10) # set 添加键值字符串,10为有效时间10秒,10秒则被覆盖
> 查:
ret = redis.get('name')
[hash中]
> 增
redis.hset('info', 'tel', '120') # hset:name , key , val 三个参数。给一个name,添加一个键值
> 查
redis.hget('info', 'tel') # hget:name,key 两个参数。获取某一个name中的某一个键的值
[列表中]
> 增
redis.lpush('students','zhangsan','lisi','wangmazi') # lpush:存储顺序相反【'wangmazi','lisi','zhangsan'】
redis.rpush('class','1班','2班','3班') # rpush:正推
> 查
redis.lindex('class',1)) # 查看对应索引值的元素