2015-02-04 3 views
2

안녕하세요 저는 Scrpayd를 사용하여 제 거미를 예약하고 있습니다. 문제는 지금까지 예정된 작업에 대한 모든 역사적인 정보를 추적하고 싶다는 것입니다. 그러나 scrapyd 서버가 다시 시작하면 모든 정보가 삭제됩니다.스크랩 스케쥴 세부 정보 데이터베이스

제 질문은 SQL Server와 같은 영구 저장소에 이러한 값을 저장하는 다른 방법이 있습니까?

또는 다른 방법이 있습니까?

아무도 도와 줄 수 있습니까?

고마워,

+0

내가 scrapyd SQLite는 지원이 알고 https://github.com/scrapy/scrapyd/blob/master/scrapyd/sqlite.py 또는 이 패키지를 사용할 수 있습니다 https://pypi.python.org/pypi/scrapy-dblite/0.2.5 –

+0

@CristianOlaru SQL 서버에 항목을 저장할 수 있습니다. 하지만 내 질문은 내가 일정 정보 및 기타 세부 사항을 저장하고 싶습니다. 제 질문을 확인하십시오 :) – Backtrack

+0

@CristianOlaru 스케쥴 정보를 추적하고 내 scrapyd 서버를 다시 시작한 후에도 로그를 남기고 싶습니다. – Backtrack

답변

0

나는 거미 미들웨어가이 일을하기에 완벽하다고 믿습니다. 스파이더가 작업을 마자 마자 DB에 통계 및 기타 원하는 정보를 저장할 수 있습니다. 여기

초안입니다 :

from scrapy import signals 
import os 

class UpdateStatsMiddleware(object): 
    def __init__(self, crawler): 
     self.crawler = crawler 
     # register close_spider method as callback for the spider_closed signal 
     crawler.signals.connect(self.close_spider, signals.spider_closed) 

    @classmethod 
    def from_crawler(cls, crawler): 
     return cls(crawler) 

    def get_jobid(self): 
     """Gets jobid through scrapyd's SCRAPY_JOB env variable""" 
     return os.environ['SCRAPY_JOB'] 

    def close_spider(self, spider, reason): 
     # do your magic here... 
     spider.log('Finishing spider with reason: %s' % reason) 
     stats = self.crawler.stats.get_stats() 
     jobid = self.get_jobid() 
     self.update_job_stats(jobid, stats) 

    def update_job_stats(self, jobid, stats): 
     # do your magic here... 
     pass 

http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html http://scrapy.readthedocs.org/en/latest/topics/signals.html