scrapy redis继承和调用父start\u请求

ou6hu8tu  于 2021-06-08  发布在  Redis
关注(0)|答案(0)|浏览(468)

尝试为带有scrapy redis的spider添加redis支持,我面临以下问题:
我想我会尝试最苗条的课程,以便于维护。我尝试在以下类中主要使用继承:

class MyRedisSpider(RedisSpider, MySpider):
    name = 'redis'

    custom_settings = {
        'LOG_LEVEL': 'DEBUG',
        'SCHEDULER': 'scrapy_redis.scheduler.Scheduler',
        'SCHEDULER_PERSIST': False,
        'SCHEDULER_QUEUE_CLASS': 'scrapy_redis.queue.SpiderQueue',
        'DUPEFILTER_CLASS': "scrapy_redis.dupefilter.RFPDupeFilter",
        'REDIS_HOST': '127.0.0.1',
        'REDIS_PORT': 6379
    }

    def __init__(self, *args,**kwargs):
        super().__init__(*args,**kwargs)

然后蜘蛛启动,在redis上创建密钥,尝试弹出请求并启动URL。。。但千万不要把任何东西推进去,这样蜘蛛就会启动并迅速空转。
如果我重写start\u请求并尝试通过它调用父版本,也会发生同样的情况

class MyRedisSpider(RedisSpider, MySpider):
  ***removed for brevity***

    def start_requests(self):
        yield from super().start_requests()

我通过以下几点做到了:

class MySpider(scrapy.Spider):
    def _start_requests(self):
      ***original logic***

    def start_requests(self):
        yield from self._start_requests()

class MyRedisSpider(RedisSpider, MySpider):
  ***removed for brevity***

    def start_requests(self):
        yield from super()._start_requests()

... 但我想了解为什么会发生这种情况,也许有一些更干净的处理方法,一些帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题