分布式

分布式:

安装:
	pip3 install scrapy-redis

settings文件:

# 1:设置去重组件,使用的是scrapy_redis的去重组件,而不是scrapy自己的去重组件了
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 2:设置调度器,使用scrapy——redis重写的调度器,
# 而不再使用scrapy内部的调度器了
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 3:可以实现断点爬取=jondir,(请求的记录不会丢失,会存储在redis数据库中,
# 不会清楚 redis的队列,下次直接从redis的队列中爬取)
SCHEDULER_PERSIST = True
# 4:设置任务队列的模式(三选一):
# SpiderPriorityQueue数据scrapy-redis默认使用的队列模式(
# 有自己的优先级)默认第一种
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
# 使用了队列的形式,任务先进先出。
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
# 采用了栈的形式:任务先进后出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
#5: 实现这个管道可以将爬虫端获取的item数据,统一保存在redis数据库中
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400,
}

# 6:指定要存储的redis数据库的主机IP
REDIS_HOST = '127.0.0.1'  # 远端的ip地址

# 指定redis数据库主机的端口
REDIS_PORT = 6379

redis 数据:

代码执行之后redis自动生成以下内容:
"xcfCrawlSpider:requests":存储的是请求的request对象
"xcfCrawlSpider:items":存储的爬虫端获取的items数据
"xcfCrawlSpider:dupefilter":存储的指纹(为了实现去重)
127.0.0.1:6379> type xcfCrawlSpider:requests
zset
127.0.0.1:6379> type xcfCrawlSpider:items
list
127.0.0.1:6379> type xcfCrawlSpider:dupefilter
set

实现scrpy.spider爬虫的分布式爬虫:

  from scrapy_redis.spiders import RedisSpider
    #继承自:RedisSpider
    class MyCrawler(RedisSpider):
        """Spider that reads urls from redis queue (myspider:start_urls)."""
        name = 'mycrawler_redis'
        allowed_domains = ['dmoz.org']
        #缺少了start_url,多了redis_key:根据redis_key从redis
        #数据库中获取任务
        redis_key = 'mycrawler:start_urls'

        def start_requests(self):
            """
            重写这个方法的目的可以根据自己的需求发起请求
            :return:
            """
            for url in self.start_urls:
                yield scrapy.Request(url, callback=self.parse, dont_filter=True)
        def parse(self, response):
             pass
    启动爬虫:scrapy crawl 爬虫名称
    现象:爬虫处于等待状态
    需要设置起始任务:
    lpush mycrawler:start_urls 目标url

注意:

	注意:实现scrpy.spider爬虫的分布式爬虫第一个回调方法必须是parse,否则代码无法运行。第三种情况同样要注意redis的命令	
posted @ 2020-04-28 15:09  black__star  阅读(125)  评论(0)    收藏  举报