@@ -145,6 +145,10 @@ def __init__(self, spider_name, request_kwargs, max_requests=None, start_request
145145 # callback will be added after instantiation of crawler object
146146 # because we need to know if spider has method available
147147 self .callback_name = request_kwargs .pop ('callback' , None ) or 'parse'
148+
149+ # do the same for errback
150+ self .errback_name = request_kwargs .pop ('errback' , None ) or 'parse'
151+
148152 if request_kwargs .get ("url" ):
149153 self .request = self .create_spider_request (deepcopy (request_kwargs ))
150154 else :
@@ -185,8 +189,8 @@ def spider_idle(self, spider):
185189 """Handler of spider_idle signal.
186190
187191 Schedule request for url given to api, with optional callback
188- that can be passed as GET parameter.
189-
192+ and errback that can be passed as GET parameter.
193+
190194 spider_idle signal is used because we want to optionally enable
191195 start_requests for the spider and if request is scheduled in
192196 spider_opened signal handler it's fired earlier then start_requests
@@ -197,6 +201,11 @@ def spider_idle(self, spider):
197201 callback = getattr (self .crawler .spider , self .callback_name )
198202 assert callable (callback ), 'Invalid callback'
199203 self .request = self .request .replace (callback = callback )
204+
205+ errback = getattr (self .crawler .spider , self .errback_name )
206+ assert callable (errback ), 'Invalid errback'
207+ self .request = self .request .replace (errback = errback )
208+
200209 modify_request = getattr (
201210 self .crawler .spider , "modify_realtime_request" , None )
202211 if callable (modify_request ):
0 commit comments