提交 27dd68a6 编写于 作者: P Pablo Hoffman

added SpiderState extension

上级 c382f2fc
......@@ -599,6 +599,7 @@ Default::
'scrapy.contrib.feedexport.FeedExporter': 0,
'scrapy.contrib.spidercontext.SpiderContext': 0,
'scrapy.contrib.logstats.LogStats': 0,
'scrapy.contrib.spiderstate.SpiderState': 0,
}
The list of available extensions. Keep in mind that some of them need to
......
from __future__ import with_statement
import os, cPickle as pickle
from scrapy import signals
from scrapy.exceptions import NotConfigured
from scrapy.xlib.pydispatch import dispatcher
class SpiderState(object):
"""Stores and loads spider state"""
def __init__(self, jobdir):
self.statefn = os.path.join(jobdir, 'spider.state')
dispatcher.connect(self.spider_closed, signal=signals.spider_closed)
dispatcher.connect(self.spider_opened, signal=signals.spider_opened)
@classmethod
def from_crawler(cls, crawler):
jobdir = crawler.settings.get('JOBDIR')
if not jobdir:
raise NotConfigured
return cls(jobdir)
def spider_closed(self, spider):
with open(self.statefn, 'wb') as f:
pickle.dump(spider.state, f, protocol=2)
def spider_opened(self, spider):
if os.path.exists(self.statefn):
with open(self.statefn) as f:
spider.state = pickle.load(f)
else:
spider.state = {}
......@@ -144,6 +144,7 @@ EXTENSIONS_BASE = {
'scrapy.contrib.closespider.CloseSpider': 0,
'scrapy.contrib.feedexport.FeedExporter': 0,
'scrapy.contrib.logstats.LogStats': 0,
'scrapy.contrib.spiderstate.SpiderState': 0,
}
FEED_URI = None
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册