为特定的scrapy请求添加延迟

时间:2013-10-02 11:29:44

标签: python scrapy

是否可以延迟特定scrapy请求的重试。我有一个中间件需要将页面请求推迟到以后的时间。我知道如何做基本的叛变(队列结束),以及如何延迟所有请求(全局设置),但我想延迟这个单独的请求。这在队列末尾附近最为重要,如果我执行简单的延期,它会立即再次成为下一个请求。

3 个答案:

答案 0 :(得分:0)

sleep()方法暂停执行给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。

因此您必须在蜘蛛中导入时间模块。

import time

然后你可以在需要延迟的地方添加睡眠方法。

time.sleep( 5 )

答案 1 :(得分:0)

使用twisted.reactor.callLater()的解决方案在这里:

https://github.com/ArturGaspar/scrapy-delayed-requests

答案 2 :(得分:0)

一种方法是将中间件添加到您的Spider(sourcelinked):

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