확장 프로그램을 사용하여 문제를 해결할 수 있습니다. 예를 들어
:을 실행하는 크롤러에 의해 촬영
from datetime import datetime
from scrapy import signals
from twisted.internet.task import LoopingCall
class SpiderDetails(object):
"""Extension for collect spider information like start/stop time."""
update_interval = 5 # in seconds
def __init__(self, crawler):
# keep a reference to the crawler in case is needed to access to more information
self.crawler = crawler
# keep track of polling calls per spider
self.pollers = {}
@classmethod
def from_crawler(cls, crawler):
instance = cls(crawler)
crawler.signals.connect(instance.spider_opened, signal=signals.spider_opened)
crawler.signals.connect(instance.spider_closed, signal=signals.spider_closed)
return instance
def spider_opened(self, spider):
now = datetime.utcnow()
# store curent timestamp in db as 'start time' for this spider
# TODO: complete db calls
# start activity poller
poller = self.pollers[spider.name] = LoopingCall(self.spider_update, spider)
poller.start(self.update_interval)
def spider_closed(self, spider, reason):
# store curent timestamp in db as 'end time' for this spider
# TODO: complete db calls
# remove and stop activity poller
poller = self.pollers.pop(spider.name)
poller.stop()
def spider_update(self, spider):
now = datetime.utcnow()
# update 'last update time' for this spider
# TODO: complete db calls
pass
시간 : 그 end time - start time
입니다. db에서 읽거나 종료 시간과 함께 저장할 때 계산할 수 있습니다.
시작과 크롤러의 정지 시간 : spider_opened
및 spider_closed
방법에 저장됩니다. (활성 또는 중지)
크롤러 상태 : now - last update time
5 초에 가까운 경우 크롤러가 활성화됩니다. 그렇지 않으면 마지막 업데이트가 오래 전 (30 초, 5 분 이상)이었던 경우 스파이더가 비정상적으로 중지되거나 전화가 끊겼습니다. 스파이더 레코드에 end time
이 있으면 크롤러가 올바르게 완료되었습니다.
동시에 실행되는 크롤러 목록 : 프론트 엔드는 end time
이 비어있는 레코드를 쿼리 할 수 있습니다. 그 거미는 달리고 죽을 것이다 (last update time
가 오래 전에 있었던 경우).
프로세스가 갑자기 종료 될 경우 spider_closed
신호가 호출되지 않을 것이라는 점을 고려하십시오. 죽은 레코드를 정리하거나 업데이트하려면 cron 작업이 필요합니다. 당신은 당신이 당신의 대시 보드에 표시 할 데이터를 저장하기 위해 자신의 내선 번호를 쓸 수
EXTENSIONS = {
# SpiderDetails class is in the file mybot/extensions.py
'mybot.extensions.SpiderDetails': 1000,
}
:
처럼, 당신의
settings.py
파일 확장자를 추가하는 것을 잊지 마십시오. 그런 다음 치료와 직접 상호 작용하지 않고 앱을 읽습니다. 더 자세한 답변이 필요합니까? – Rolando@Rho. 네,보다 자세한 답변을 부탁드립니다. – kishan
안녕하세요. @Rho .. 자세한 답변을 기다리고 있습니다.이 질문에 대한 의견을 좀 더 제공해 주시면 매우 도움이 될 것입니다. – kishan