尝试为带有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()
... 但我想了解为什么会发生这种情况,也许有一些更干净的处理方法,一些帮助!
暂无答案!
目前还没有任何答案,快来回答吧!