天天看点

scrapy_redis 实现分布式爬虫scrapy_redis 要实现分布式爬虫,需要分析项目中的spiders文件夹中的爬虫文件

scrapy_redis 要实现分布式爬虫,需要分析项目中的spiders文件夹中的爬虫文件

#----1 导入分布式爬虫类

from scrapy_redis.spiders import RedisSpider
           

#----2 继承分布式爬虫类

class BookSpider(RedisSpider):
           

#----3 注销start_urls,增加了一个redis-key,没有start_urls,因为分布式中,如果每台电脑都请求一次start_url就会重复

redis_key = 'start_url在redis中对应的键'
           

#----4 多了__init__方法,该方法不是必须的,可以手动指定allow_domains

#----4.1 注销allowed_domains

# # 修改允许的域xxx
	    # allowed_domains = ['xxx.com']
	    # # 修改起始的url
	    # start_urls = ['https://xxx.com']
           

#----4.2 配置__init__方法

def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = list(filter(None, domain.split(',')))
        super(定义的爬虫类名, self).__init__(*args, **kwargs)
           

#----5 启动方法

#----5.1 在每个节点正确的目录下执行爬虫文件,使该节点的scrapy_redis爬虫程序就位

scrapy crawl 爬虫名
           

#----5.2 在redis中给redis_key添加起始url,使全部节点真正的开始运行

lpush redis_key 'start_url'
           

#----0 在settings.p中添加断点续爬的配置,实现真正的分布式爬虫

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400,
}
REDIS_URL = "redis://127.0.0.1:6379"