我需要以一定的速度抓取一个网站,比方说,每分钟8页。现在我希望我对远程服务器的请求在一分钟内均匀分布,这样就不会损害服务器它要求。
如何在两个连续请求之间保持统一的时间差(以秒为单位)?这样做的最佳方式是什么?
答案 0 :(得分:1)
这里确实有两个不同的问题。让我们分别处理它们:
第一个问题
我需要以一定的速度抓取一个网站,比方说,每页8页 分钟....这样它不会损害它所要求的服务器。
释义:我希望每分钟不发送超过8个请求,因为我希望对远程服务器好一点。
对于这个答案,使用PHP和Curl有一个关于速率限制的related Stack Overflow question。
第二个问题
我希望我对远程服务器的请求是统一的 分发一分钟......我怎样才能保持统一的时间 两个连续请求之间的秒数差异
释义:我想在每次查询之间有相同的时间。
这是一个与第一个问题不同的问题,而且比较棘手。要做到这一点,您需要使用时钟来跟踪每个请求之前和之后,并持续平均请求所花费的时间和您请求的睡眠时间,和/或您调用get()的频率。您还必须考虑每个请求需要多长时间(如果您获得极低的连接会降低平均值,以便您每分钟只执行3或4个请求,那该怎么办...)
我个人认为这实际上并不是你需要做的“所以它不会损害服务器”。
原因如下:通常,速率限制设置为“每个最低时间片的上限”。所以这意味着“每分钟8个请求”意味着它们可以在一分钟内同时出现,但每分钟不超过8个。速率限制器没有期望它们将在一分钟内均匀分布。如果他们确实想要这样,他们就会说“每五秒就有一次请求”。