scrapy-redis
sẽ luôn đợi các url mới được đẩy vào hàng đợi redis. Khi hàng đợi trống, trình thu thập thông tin sẽ chuyển sang trạng thái không hoạt động trạng thái và chờ các url mới. Đó là những gì tôi đã sử dụng để đóng trình thu thập thông tin của mình khi hàng đợi trống.
Khi nhện ở trạng thái không hoạt động (khi nó không làm gì cả), tôi kiểm tra xem có còn thứ gì đó trong hàng đợi redis không. Nếu không, tôi đóng trình thu thập thông tin bằng close_spider
. Đoạn mã sau nằm trong spider
lớp:
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
from_crawler = super(SerpSpider, cls).from_crawler
spider = from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.idle, signal=scrapy.signals.spider_idle)
return spider
def idle(self):
if self.q.llen(self.redis_key) <= 0:
self.crawler.engine.close_spider(self, reason='finished')