使用分布式爬虫

单机版使用scrapy-redis
1.使用原因:主要是为了去重及使用redis数据库保证下载requests的完整性,可以断点续传,因为没有下载完成的request会保存在redis数据库里

指定使用scrapy-redis的调度器

SCHEDULER = “scrapy_redis.scheduler.Scheduler”

指定使用scrapy-redis的去重

DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter’

指定排序爬取地址时使用的队列,

默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。

SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderQueue’

可选的 按先进先出排序(FIFO)

SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderQueue’

可选的 按后进先出排序(LIFO)

SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderStack’

在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues

SCHEDULER_PERSIST = True

只在使用SpiderQueue或者SpiderStack是有效的参数,指定爬虫关闭的最大间隔时间

SCHEDULER_IDLE_BEFORE_CLOSE = 10

通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item

这个已经由 scrapy-redis 实现,不需要我们写代码

ITEM_PIPELINES = {
#‘distribute_country.pipelines.DistributeCountryPipeline’:300,
‘scrapy_redis.pipelines.RedisPipeline’: 400
}

DOWNLOADER_MIDDLEWARES = {
‘distribute_country.middlewares.SeleniumMiddleware’: 543,

}

指定redis数据库的连接参数

REDIS_PASS是我自己加上的redis连接密码(默认不做)

REDIS_HOST = ‘127.0.0.1’
REDIS_PORT = 6379
#REDIS_PASS = ‘redisP@ssw0rd’

LOG等级

LOG_LEVEL = ‘DEBUG’

#默认情况下,RFPDupeFilter只记录第一个重复请求。将DUPEFILTER_DEBUG设置为True会记录所有重复的请求。
DUPEFILTER_DEBUG =True

分布式版scrapy-redis
1.修改settings.py文件,参考单机版scrapy-redis
2.继承关系改为如下代码(继承RedisSpider)
from scrapy_redis.spiders import RedisSpider

class LabscrapySpider(RedisSpider):
name = ‘labscrapy’
allowed_domains = [‘lab.scrapyd.cn’]
redis_key = “lab:labspider”
# start_urls = [‘http://lab.scrapyd.cn/’]

3.添加redis-key作为订阅器(subscribe),类似于redis数据库中的channel
redis_key = “lab:labspider”

4.在redis数据库中向redis_key指定的list中推送开始网址,使爬虫开始下载lpush lab:labspider http://lab.scrapyd.cn/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值