1月19日学习内容整理:Scrapy框架补充之scrapy-redis组件

1. scrapy-redis组件
任务:爬取抽屉新热榜咨询(10个小时)
- 加内存
- 多开几个电脑
- 多进程
- 多开几个爬虫任务
- 网
安装:
pip3 install scrapy-redis ,帮助你写了两个类

安装:
redis ,帮助你保存任务和要过滤的url


a. 什么是redis
软件,帮助我们对服务器内存进行存取数据。就是帮助我们在另一台机器的内存上存取数据
Linux:
# 下载
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
# 解压
tar xzf redis-3.0.6.tar.gz
# 进入文件件
cd redis-3.0.6
# 编译
make

python连接并操作:
# pip3 install redis

import redis

# 数据库连接、redis连接
conn = redis.Redis(host='47.93.4.198',port=6379)
"""
{
k1:v1,
k2:[11,22,33],
k3:{
'kk1':'xx',
'kk2':'xx',
}
}
"""
# 字符串
conn.set('k1','v1')

# list
conn.lpush('k2',11,22,33)

# 字典
conn.hset('k3','kk1','xx')
conn.hset('k3','kk2','xx')

b. scrapy-redis

pip3 install scrapy-redis



1. 调度器scrapy-redis
redis = {
'chouti:requests':[picle.dumps((http://www.baidu.com,回调函数)),http....],
'cnblogs:requests':[http://www.baidu.com,http....],
'chouti:dupefilter':[爬取抽屉页面时,保存的已经爬取过的页面,]
'cnblogs:dupefilter':[爬取抽屉页面时,保存的已经爬取过的页面,]
}


PS: 一般在公司,在scrapy-redis基础上增加功能。
应用:
# 连接相关配置
REDIS_HOST = '47.93.4.198' # 主机名
REDIS_PORT = 6379 # 端口
#REDIS_URL = 'redis://root:123@47.93.4.198:6379' # 连接URL(优先于以上配置)
# REDIS_PARAMS = {} # Redis连接参数 默认:REDIS_PARAMS = {'socket_timeout': 30,'socket_connect_timeout': 30,'retry_on_timeout': True,'encoding': REDIS_ENCODING,})
# REDIS_PARAMS['redis_cls'] = 'redis.Redis' # 指定连接Redis的Python模块 默认:redis.StrictRedis
REDIS_ENCODING = "utf-8" # redis编码类型 默认:'utf-8'

 

# 利用redis的去重规则
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 调度器
# SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER = "sp2.xxx.MyScheduler"


SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue' # 默认使用优先级队列(默认),其他:PriorityQueue(有序集合),FifoQueue(列表)、LifoQueue(列表)
SCHEDULER_QUEUE_KEY = '%(spider)s:requests' # 调度器中请求存放在redis中的key
SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat" # 对保存到redis中的数据进行序列化,默认使用pickle
SCHEDULER_PERSIST = True # 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空
SCHEDULER_FLUSH_ON_START = False # 是否在开始之前清空 调度器和去重记录,True=清空,False=不清空
SCHEDULER_IDLE_BEFORE_CLOSE = 10 # 去调度器中获取数据时,如果为空,最多等待时间(最后没数据,未获取到)。
SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter' # 去重规则,在redis中保存时对应的key
SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 去重规则对应处理的类
扩展:
继承 scrapy_redis.scheduler.Scheduler
继承 scrapy_redis.dupefilter.RFPDupeFilter

posted @ 2018-01-19 18:39  九二零  阅读(64)  评论(0编辑  收藏  举报