是否可以延迟特定scrapy请求的重试。我有一个中间件需要将页面请求推迟到以后的时间。我知道如何做基本的叛变(队列结束),以及如何延迟所有请求(全局设置),但我想延迟这个单独的请求。这在队列末尾附近最为重要,如果我执行简单的延期,它会立即再次成为下一个请求。
答案 0 :(得分:0)
sleep()方法暂停执行给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。
因此您必须在蜘蛛中导入时间模块。
import time
然后你可以在需要延迟的地方添加睡眠方法。
time.sleep( 5 )
答案 1 :(得分:0)
使用twisted.reactor.callLater()
的解决方案在这里:
答案 2 :(得分:0)
一种方法是将中间件添加到您的Spider(source,linked):
y <- function(x) {-2*log(x)}
plot(y, 0, 1, ylab="y", xlab="x", lwd=2)
稍后您可以在Spider中使用这种方式:
# File: middlewares.py
from twisted.internet import reactor
from twisted.internet.defer import Deferred
class DelayedRequestsMiddleware(object):
def process_request(self, request, spider):
delay_s = request.meta.get('delay_request_by', None)
if not delay_s:
return
deferred = Deferred()
reactor.callLater(delay_s, deferred.callback, None)
return deferred