如何解决Scrapy-redis继承并调用父项start_requests
尝试添加对带有scrapy-redis的蜘蛛的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上创建密钥,尝试弹出请求和start_urls ...但是从不将任何东西压入其中,因此蜘蛛启动并迅速闲置。
如果我覆盖start_requests并尝试通过它调用父版本,也会发生同样的情况
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()
...但是我想帮助您理解为什么会发生这种情况,也许还需要一些更简洁的处理方法!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。